*위와 같이 keyword arguments는 순서가 바뀌어도 상관 없지만, positional arguments 부분은 순서를 지켜줘야 한다.
함수에서는 parameter에 default 값을 미리 정해주는 것도 가능하다,
단! 아래 예시는 잘못 되었다
def love_you(my_name = "정우성", your_name):
print(f"{my_name} loves {your_name}")
love_you(your_name="아이유")
def love_you(your_name, my_name = "정우성"):
print(f"{my_name} loves {your_name}")
love_you(your_name="아이유")
2.마찬가지로!
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
exam1("정우성", 20, "01012341234", "seoul")
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
exam1("정우성", "01012341234", "seoul", 20)
위의 두개의 코드 중 첫번째는 옳지만 두번째 코드는 에러가 발생한다! 이유는 두번째 코드 중 age가 parameter 마지막 부분에 있기 때문에 세번째 keyword "seoul"이 age를 받는지 *args를 받는지 인식을 못 하고 있기 때문!
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")
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", mobile="01012341234", address="seoul")
위와 비슷한 이유로 kwargs parameter를 address parameter 뒤로 옮겨줘야 실행된다! 밑에코드 O, 위코드 X
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")
def mixed_params(age, name="아이유", *args, address, **kwargs):
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")
**밑에 코드 default값을 사용할건지, 안할건지에 따라 name="아이유"의 값을 변경할 위치 선정을 잘 해줘야 읽힌다.