TIL 18. 파이썬 함수의 parameter, argument
먼저, 함수를 정의할 때의 변수 이름을 매개변수(parameter)라고 하며, 함수를 호출할 때 전달하는 값을 인수(argument)라고 합니다.
1. 함수를 정의 할때 default value parameter과 non-default value parameter의 위치
함수를 정의할 때 각 parameter의 default 값을 지정해 놓을 수도 있습니다. 해당 인자에 넣을 값을 모르거나 넣을 값이 없을 경우, 함수가 반환될 때 기존에 설정한 default 값이 대신 노출되게 하는 기능입니다.
(참고) 함수를 호출할 때는 정의한 함수의 매개변수 수만큼 인자를 입력하여야 하는데, default 값을 지정하면 그 값 이외의 매개변수 만큼만 인자를 입력하면 됩니다.
-
default 값을 활용할 때 주의할 점
-. 함수를 정의할 때 default 값 파라미터를 non-default 값 파라미터 앞에 선언하면 안됨
→ default 값 파라미터를 앞에 선언하면, SyntaxError가 뜨면서 함수가 선언되지 않음SyntaxError: non-default argument follows default argument
-
default 값 파라미터가 앞에 선언되어버리면, 이후에 함수를 호출할 때 입력한 특정 인자가 어떤 파라미터에 대입되는지 알 수 없기 때문
-. default 값 파라미터 자체가 입력이 될 수도, 안될 수도 있는 값이기 때문에, 정확히 원하는 값을 반환하는데 어려움이 있음parameter의 위치순서: non-default value parameter, default value parameter
2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치에 따른 에러가 발생
-
args
-. arguments이란 뜻
-. 앞에 *을 붙여 선언
-. key word 되지 않은 형태의 정해지지 않은 수의 Arguments를 받음
→ 변수의 개수와 상관없이 받아들임 -
kwargs
-. keyword arguments이란 뜻
-. 앞에 **을 붙여 선언
-. 키워드 = 특정 값의 형태로 함수 호출
-. 딕셔너리 형태로 {'키워드':'특정값'}으로 함수 내부에 전달
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: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
→ 파이썬은 어디서부터 어디까지 *args의 변수에 담아야 할 지 알 수 없어, 가장 마지막에 위치시켜주어야 합니다. (*args가 뒤의 값들을 모두 가져가버림)
아래와 같이 *args를 가장 마지막에 위치시켜주면 정상적으로 동작합니다.
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("정우성", "01012341234", "seoul", 20)
name=정우성
args=('seoul', 20)
age=01012341234
3. 가변 키워드 인수 (variable length keyword arguments)의 위치에 따른 에러 발생
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, *kwargs, address=0):
^
SyntaxError: invalid syntax
→ args와 동일하게 뒤에 남은 값들을 모두 가져가 address의 값이 인식이 안되어 오류 발생
아래와 같이 *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")
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
4. 위치 인수와 키워드 가변 키워드 인수 (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")
def mixed_params(name="아이유", *args, age, **kwargs, address):
^
SyntaxError: invalid syntax
→ 앞에서 살펴본 2가지의 에러가 있습니다.
1) non-default-value parameter가 default-value parameter 앞에 위치
2) **kwargs의 위치가 마지막에 위치
순서를 조정하여 아래와 같이 작성하면 정상적으로 동작합니다.
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")
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
참고 자료
https://getkt.com/blog/python-keyword-only-arguments/
https://velog.io/@devmin/
https://livetodaykono.tistory.com/19
Author And Source
이 문제에 관하여(TIL 18. 파이썬 함수의 parameter, argument), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fall031/파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)