함수를 정의 할때 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
위치 인수(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")
가변 키워드 인수 (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")
위치 인수와 키워드 가변 키워드 인수 (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을 한다.