2021. 10. 10. 16:52ㆍ언어/Python
Function Parameters - 2
위치 인수(Positional arguments)
함수를 호출할 때 전달되는 값이 인자들이 매개변수 순서와 동일하게 전달하는 방식으로 가장 많이 사용되는 방식이다.
가변 인수(Variable length arguments)
인수의 개수가 변할 수 있다는 의미로, 함수를 호출할 때 인수의 개수를 다양하게 바꿔가며 전달할 수 있는 방식이다.
가변 인수(*arg)를 사용할 땐 입력하는 인수들의 순서가 중요하다.
우선순위
- 위치 인수 (default X)
- 위치 인수 (default O)
- / (위치 인수들 어딘가에 존재)
- 위치 가변 인수 (*)
- 키워드 전용 인수 (기본값 유무 상관 없음)
- 키워드 전용 가변 인수 (**)
위치인수(Default O vs Default X)
default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유
위치 인수가 parameter에 할당될 때 왼쪽에서 오른쪽 순서의 방향성이 존재한다.
따라서 default value parameter를 non-default value parameter앞에 정의하고 argument를 1개만 전달하면 해당 argument는 default value parameter에 할당되므로 non-default value parameter는 할당받는 값이 없어서 오류를 발생하게 된다.
def love_you(my_name = "정우성", your_name):
print(f"{my_name} loves {your_name}")
love_you("아이유")
> Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument
위치 인수와 가변 인수
다음 코드를 실행하면 age
값이 *arg
값이랑 바뀌어서 정상 출력되지 않는다는 의미의 error가 발생한다.
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)
# error
Traceback (most recent call last):
File "main.py", line 6, in <module>
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
age
값과 *arg
값을 위치를 바꿔 호출하면 오류가 발생하지 않는다.
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")
''' output
name=정우성
args=('01012341234', 'seoul')
age=20
'''
가변 키워드 인수
다음 코드를 실행하면 가변인수가 위치하고 가변인수 뒤에 address가 위치해 있기 때문에 error가 발생한다.
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")
# error
SyntaxError: invalid syntax
address
값과 `kwarg`** 값을 위치를 바꿔 호출하면 오류가 발생하지 않는다.
이 때 address
는 default값을 가지기 때문에 위치 인자(positional arguments)인 name, age 보다 뒤에 위치해야한다.
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")
''' output
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
'''
위치인수와 가변인수, 가변 키워드 인수
다음 코드도 마찬가지로 error가 발생한다.
def mixed_params(name="아이유", *args, age, **kwargs, address=0):
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")
# error
SyntaxError: invalid syntax
위치 인수인 age
를 첫번째 매개변수로 이동시켜주고 `kwargs`**를 맨 뒤로 옮겨준다.
adderss
는 키워드 전용 인수이므로 가변 인수 뒤 가변 키워드 인수 앞에 위치한다.
def mixed_params(age, name="아이유", *args, address=0, **kwargs):
print("age=",end=""), print(age)
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("address=",end=""), print(address)
print("kwargs=",end=""), print(kwargs)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
''' output
age=20
name=정우성
args=('01012341234', 'male')
address=seoul
kwargs={'mobile': '01012341234'}
'''
참고 사이트
'언어 > Python' 카테고리의 다른 글
TIL16 | Python Modules & Packages, 절대경로와 상대경로 (0) | 2021.10.11 |
---|---|
TIL15 | Python Set과 Dictionary (0) | 2021.10.11 |
TIL14 | Python List와 Tuple (0) | 2021.10.11 |
TIL12 | Python Function Parameters (0) | 2021.10.10 |
TIL11 | Python 문법 (0) | 2021.10.10 |