가변인자 -> *args / **kwargs
def f(x, *args):
...
>>f(1,2,3,4,5) # 함수 호출
def f(x, *args):
# x -> 1
# args -> (2,3,4,5)
# x로는 1만 받고 나머지 2,3,4,5는 가변인자에서 받아주는 것임.
def f(x, y, **kwargs):
...
>> f(2, 3, flag=True, mode='fast', header='debug') # 함수 호출
def f(x, y, **kwargs):
# x -> 2
# y -> 3
# kwargs -> {'flag' : True, 'mode' :'fast', 'header' : 'debug'}
# 2랑 3을 각각 x랑 y가 받고 나머지 튜플을 kwargs 인 키워드 가변인자가 다 받아줌.
def f(*args, **kwargs):
...
>> f(2, 3, flag=True, mode='fast', header='debug') # 함수 호출
# 인자들은 위치 및 키워드 요소로도 분할됨!
def f(*args, **kwargs):
# args = (2, 3)
# kwargs = { 'flag': True, 'mode': 'fast', 'header': 'debug' }
# 이 함수는 위치 또는 키워드 인자들의 어떤 조합이라도 받을 수 있음.
# 레퍼를 작성하거나 인자를 다른 함수에 전달하고자 할 때 사용.
numbers = (2,3,4)
f(1, *numbers) # (=f(1,2,3,4)와 같은 의미)
options = {
'color' : 'red',
'delimiter' : ',',
'width' : 400
}
f(data, **options)
# f(data, color='red', delimiter=',', width=400)와 같음 -> **options에서 튜플을 받아줌.