[python] default value parameter / non-default value parameter
내용에 대해 이야기 하기에 앞서, 제가 헷갈리는 parameter와 argument의 용어를 명확히 하도록하겠습니다.
- parameter : 함수를 정의하는 경우, 필요한 변수. 매개변수를 말합니다.
- argument : 정의된 함수를 부를 때, 매개변수에 전달되는 값, 즉 인자값을 말합니다.
parameter(매개변수)
- 함수를 정의하는 경우에 필요한 변수를 parameter라고 합니다.
- parameter의 인자값(argument)이 전달되는 형태로는 크게
1. 입력 순서대로 값이 전해지는 'positional argument'형태- 키워드를 명시하는 'keyword argument' 형태
- 1, 2를 혼합한 형태 (이 때, positional argument의 입력순서를 지키지 않으면 에러가 납니다.)
가 있습니다.
default value parameter / non-default value parameter란 무엇일까요?
- 함수를 정의하면서 parameter의 기본값을 정의해줄 수 있는데요, 이렇게 기본값이 정의된 parameter를 'default value parameter'라고 합니다.
- 이와는 달리 기본값이 정의되지 않은 parameter는 non-default value parameter라고 합니다.
- default value parameter는 함수가 호출될 때, 값을 입력하지 않으면 기본값을 자동으로 넘기게 됩니다.
- 아래의 예시를 봐주세요!
def movie(title, genre="드라마"):
print(f"영화 : {title}({genre})")
movie("Closer") *"영화 : Closer(드라마)"
- default velue parameter을 사용할 때, 주의 해야 할 점은
non-default value보다 앞에 선언하면 안 된다는 것 입니다.
(Syntax error 발생)
Q. 왜 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 걸까요?
- 파이썬은 기본적으로 전달 된 순서대로 값들을 변수에 할당합니다.
- non-default value parameter이 먼저 배치되어 있다면 순서대로 전달된 인자값들을 parameter값으로 입력하면 될 것입니다.
- 하지만 값의 입력을 생략해도, 기본값으로 저장된 인자값이 전달되는 default-value parameter가 non-default value parameter의 앞에 있다면 파이썬은 전달되는 인자값을 순서에 맞게 default-value parameter -> non-default value parameter에 할당합니다.
- 그렇다면 default value pararmeter을 사용하는 이유가 없어지게 됩니다. 따라서 함수에서 parameter을 선언할 대에는 아래의 순서를 지켜야 합니다.
parameter 선언순서
1. 기본 매개변수(non-default)
2. 기본값이 정해진 기본 매개변수
3. 가변 매개변수(*args)
4. 키워드 매개변수
4. 가변 키워드 인수(**kwargs)
- 이 순서를 지키지 않으면 파이썬은 애러 메시지를 리턴합니다.
1. 가변인자(*args)의 위치를 positional argument 보다 앞에 놓으면?
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
위와같이 정상적으로 출력된다.
'''
2. 키워드 가변인자(**kwargs)의 위치를 positional argument 보다 앞에 놓으면?
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
위와같이 정상적으로 출력된다.
'''
3. 위치 인수와 키워드 가변 키워드 인수 (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")
## 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
Author And Source
이 문제에 관하여([python] default value parameter / non-default value parameter), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bluepony/python-default-value-parameter-non-default-value-parameter저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)