- Positional Arguments ex) my_name
- Default Argument ex) my_name = "정우성"
- Variable Length Positional Arguments ex) *args
- Non-Default Keyword-Only Arguments ex) 값이 할당안된 my_name
- Keyword-Only Argument with Defaults
- Variable Length Keyword Arguments ex) **kwargs
Positional Argument가 Parameter에 할당될 때는 왼쪽에서 오른쪽으로의 방향성이 존재한다.
def love_you(my_name = "정우성", your_name): print(f"{my_name} loves {your_name}") > Traceback (most recent call last): File "python", line 1 SyntaxError: non-default argument follows default argument
이때, non-default value parameter는 할당받는 값이 없으므로 오류가 발생한다.
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)
name
에 정우성
이 할당되고 나머지 01012341234
,seoul
,20
이 *args
에 할당되기 때문에 age
파라미터에 할당될 값이 없다.
def func_param_with_var_args(name, age, *args): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age)
Variable Length Positional Arguments가 Positional Arguments 앞에 있어서 발생한 Error이므로 *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")
Variable Length Positional Arguments가 Default Arguments 보다 앞에 위치해서 SyntaxError가 발생했다.
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)
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")
Argument들의 우선순위가 뒤죽박죽이라 SyntaxError 발생
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)