내용에 대해 이야기 하기에 앞서, 제가 헷갈리는 parameter와 argument의 용어를 명확히 하도록하겠습니다.
- parameter : 함수를 정의하는 경우, 필요한 변수. 매개변수를 말합니다.
- argument : 정의된 함수를 부를 때, 매개변수에 전달되는 값, 즉 인자값을 말합니다.
def movie(title, genre="드라마"):
print(f"영화 : {title}({genre})")
movie("Closer") *"영화 : Closer(드라마)"
parameter 선언순서
1. 기본 매개변수(non-default)
2. 기본값이 정해진 기본 매개변수
3. 가변 매개변수(*args)
4. 키워드 매개변수
4. 가변 키워드 인수(**kwargs)
- 이 순서를 지키지 않으면 파이썬은 애러 메시지를 리턴합니다.
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발생 :
가변인자는 인자의 갯수가 정해져있지 않기 때문에
이어지는 모든 인자를 가변인자의 인자값으로 저장하므로
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)
func_param_with_var_args("정우성", 20, "01012341234", "seoul" )
'''
순서에 맞게 parameter를 배치하면
name=정우성
args=('01012341234', 'seoul')
age=20
위와같이 정상적으로 출력된다.
'''
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")
## 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)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
'''
순서에 맞게 parameter를 배치하면
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
위와같이 정상적으로 출력된다.
'''
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")
## 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)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
'''
순서에 맞게 parameter를 배치하면
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
위와같이 정상적으로 출력된다.
'''
참고
파이썬 문법에서의 매개변수, 인자란 무엇인가
Python SyntaxError: non-default argument follows default argument Solution