default value parameter는 항상 non-default value parameter보다 뒤에 와야 한다.
!!def func(non-default, default)
수정 전 - 오류발생
def love_you(my_name="아이유", your_name, his_name):
print(f"{my_name} loves {your_name} and {his_name}")
love_you("정우성", "이정재")
parameter가 3개인 상태에서 argument 2개가 입력되면,
앞에서부터 차례대로 my_name = "정우성", your_name = "이정재"로 지정되어
마지막 parameter인 his_name에 지정될 argument가 존재하지 않게 된다.
이를 방지하기 위해, default value parameter가 항상 non-default의 뒤에 오도록 한다.
수정 후 - 정상출력
def love_you(your_name, his_name, my_name="아이유"):
print(f"{my_name} loves {your_name} and {his_name}")
love_you("정우성", "이정재")
# 출력
아이유 loves 정우성 and 이정재
가변인수는 항상 위치인수보다 뒤에 와야 한다.
(가변인수 뒤에 오는 위치인수들은 의미가 없어진다.)
수정 전 - 오류발생
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)
수정 후 - 정상출력
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("args=",end=""), print(args)
func_param_with_var_args("정우성", 20, "01012341234", "seoul")
#출력
name=정우성
age=20
args=('01012341234', 'seoul')
가변 키워드인수는 항상 다른 키워드인수보다 뒤에 와야 한다.
수정 전 - 오류발생
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("address=",end=""), print(address)
print("kwargs=",end=""), print(kwargs)
func_param_with_kwargs("정우성", "20", address="seoul", mobile="01012341234")
# 출력
name=정우성
age=20
address=seoul
kwargs={'mobile': '01012341234}'
- 인수 위치 정리
위치인수 > 가변인수(*arg) > 키워드인수 > 가변키워드인수(**kwargs)
- 같은 인수는 중복될 수 없음
수정 전 - 오류발생
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")
# 위치인수와 키워드인수에 모두 'address'가 입력되었음
수정 후 - 정상출력
def mixed_params(age, address, name="아이유", *args, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("args=",end=""), print(args)
print("address=",end=""), print(address)
print("kwargs=",end=""), print(kwargs)
mixed_params(20, "seoul", "정우성", "01012341234", "male" ,mobile="01012341234")
# 키워드인수 'address=seoul'를 제거하고 위치인수의 value로 'seoul' 입력
# 출력
name=정우성
age=20
args=('01012341234', 'male')
address=seoul
kwargs={'mobile': '01012341234}'