# 24. TIL arguments

이지훈·2021년 6월 11일
0

TIL

목록 보기
24/33
post-thumbnail

1.

함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유

  • default value parameter : 함수가 호출될 때마다 파라미터에 인자를 받아서 넘겨주는 parameter

  • non-default value parameter는 함수가 호출될 때 인자를 받아 넘겨줄 수 있다. 인자를 넘겨주지않을 경우에는 keyword = value로 선언되어 있을 때는 지정한 value를 넘겨준다.

  • default value parameter를 non-default value parameter

def fun1(a="who is you", b="True", x, y):
...     print a,b,x,y
... 
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

파라미터를 정의하는 순서없이 무작위로 생성 시 함수는 어떤 파라미터에 어떤 값을 받아야 하는지 모르기 때문입니다.

파이썬 버전 3부터는 "*"를 이용해 다음과 같이 설정 가능합니다.

def fun1(a="who is you", b="True", *, x, y):
    pass

2.

위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

  • positional arguments: 함수에 인수를 순서대로 넣는 방식

  • variable length arguments : 위치 인수와 리스트 언패킹을 이용하여 인수의 개수가 정해지지 않은 가변 인수를 만듭니다.

❗ 만약 가변인수와 위치인수의 순서를 잘못 입력한다면?

def func_param_with_var_args(name, *args, age):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
 
func_param_with_var_args("정우성", "01012341234", "seoul", 20)

TypeError(유형 오류)가 발생합니다.

오류가 발생하지 않게 만들려면 다음과 같이 인수의 순서를 바꿔줍니다.

def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
 
func_param_with_var_args("정우성", 20, "01012341234", "seoul")

3.

가변 키워드 인수 (variable length keyword arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

  • variable length keyword arguments : 임의의 개수의 키워드 인자를 받을 수 있게 만드는 인수
def func_param_with_kwargs(name, age, **kwargs, address=0):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address) 
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")

위와 같이 작성시 syntax error가 발생한다. 즉, 문법에 맞지 않다는 뜻이다.

아래와 같이 non-default value parameter -> default value parameter -> variable length keyword arguments 순서대로 인수를 넣는다.

def func_param_with_kwargs(name, age, address=0, **kwargs):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)
 
func_param_with_kwargs("정우성", 20, address="seoul", mobile="01012341234")

4.

위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

def mixed_params(name="아이유", *args, age, **kwargs, address):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)
 
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")

위와 같이 작성시 syntax error가 발생한다. 즉, 문법에 맞지 않다는 뜻이다.

def mixed_params(age, name="아이유", *args, address,**kwargs):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
    print("address=",end=""), print(address)
    print("kwargs=",end=""), print(kwargs)
 
mixed_params( 20, "정우성", "01012341234", "male" ,address="seoul",mobile="01012341234")

다음과 같이 위치를 바꾸면 정상적으로 return을 한다.


출처
1번 참고 자료
2번 참고 자료
3, 4번 참고 자료

profile
꾸준하게 🐌

0개의 댓글