TIL 파이썬 02. Function Parameter
default value parameter vs non-default value parameter
def example(a, b, c):
return a + b + c
example(0, 1, 2)
non-default parameter (a, b, c) 가 셋인 example 함수이다.
이 경우 argument 또한 셋이 필요하다.
def example(a=0, b=1, c=2):
return a + b + c
example() # a=0, b=1, c=2
example(1) # a=1, b=1, c=2
example(1, 2) # a=1, b=2, c=2
example(1, 2, 3) # a=1, b=2, c=3
전부 default value parameter 로만 3개 채워졌을때는 argument를 0~3개 사이로 입력이 가능하다.
주석의 내용처럼 입력된 인수를 우선적으로 변수에 저정하고, 입력된 인수가 없으면 default value로 변수에 저장된다.
def example(a=1, b=1, c):
return a + b + c
example(0)
만약 이렇게 하면 c에 0을 할당할것 같지만...
현실은 a에 0을 할당하고 c는 사용되지 않는다.
따라서 non-default value parameter 가 우선적으로 와야하고, 그 뒤에 default value parameter가 와야 할 것이다
위치 인수(positional arguments)와 가변 인수(variable length 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'
이라고 코드를 쓰면 에러가 발생한다.
age의 값을 받지 못했다고 싫어한다.
arg가 임의의 개수를 받기 때문에 20 또한 args로 들어간 것이다.
따라서 아래와 같이 수정한다.
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", age = 20)
name=정우성
args=('01012341234', 'seoul')
age=20
정상 출력된다.
가변 키워드 인수 (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")
SyntaxError: invalid syntax
매개변수 address=0에서 빨간줄이 그어져있다.
kwargs 바로 뒤에 address=0이 따라 올수 없다고 한다.
따라서 kwargs를 address=0 뒤쪽으로 보내준다.
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")
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
잘 출력된다.
위치 인수와 키워드 가변 키워드 인수 (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: invalid syntax
해당 에러는 여태까지 우리가 했던 에러들의 집합체이다.
일단 non-default parameter인 age랑 address를 앞으로 옮기고, default parameter인 name="아이유"를 다음에, 그리고 마지막에 가변인수인 *args랑 **kwargs를 마지막에 넣었다.
def mixed_params(age, address, name="아이유", *args, **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")
TypeError: mixed_params() got multiple values for argument 'address'
그랬더니 address랑 충돌 일어난다고 싫어한다.
따라서 우리가 최종적으로 원하는 address 변수의 값은 "seoul"이므로, 매개변수의 address를 *args 뒤에 위치시킨다.
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
정상적으로 출력된다.
Author And Source
이 문제에 관하여(TIL 파이썬 02. Function Parameter), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@slamhit98/TIL-파이썬-02.-default-value-parameter-vs-non-default-value-parameter저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)