[Python] 함수호출과 매개변수 *, ** 사용 규칙

최대 1 분 소요

itreable 객체와 매개변수

func(*iterable) iterable 객체를 전달하면서 *을 붙여서 함수 호출할 때 func(dict) dict 객체를 전달하면서 **을 붙여서 함수 호출할 때 def func(*args) 함수를 정의하면서 매개변수 args에 *을 붙일 떼 def func(args) 함수를 정의하면서 매개변수 args에 ** 붙일 때

>>> def who(a,b,c):
        print(a,b,c,sep=', ')

>>> who(*[1,2,3])
1, 2, 3
>>> who(*'abc')
a, b, c
>>> d = dict(a=1, b=2, c=3)
>>> who(*d) # *을 붙이면 키가 매개변수에 전달
a, b, c
>>> who(**d) # **을 붙이면 값이 매개변수에 전달
1, 2, 3
>>> who(*(d.items())) # 뷰객체도 iterable 객체이다.
('a', 1), ('b', 2), ('c', 3)



딕셔너리와 매개변수

>>> def func(*args):
        print(args)  # args는 튜플

>>> func()
()
>>> func(1)
(1,)
>>> func(1,2,3)
(1,2,3)

매개변수 선언에 *를 붙이면 전달되는 값들이 모두 하나의 튜플로 묶여서 매개변수 args에 전달된다.

>>> def func(**args):
        print(args)

>>> func(a=1)  # 딕셔너리 전달
{'a' : 1}
>>> func(a=1, b=2)
{'a' : 1, 'b' : 2}

**args는 딕셔너리의 생성으로 이어지고, 이 딕셔너리를 구성할 키와 값의 정보를 key = value의 형태로 전달해야 한다.

>>> def func(*args1, **args2):
        print(args1)  # 튜풀
        print(args2)  # 딕셔너리

>>> func()
()
{}
>>> func(1, a=1)
(1,)
{'a' : 1}
>>> func(1,2,a=1,b=2)
(1,2)
{'a':1, 'b':2}

위와 같이 *args와 **args를 동시에 두는 것도 가능하지만 흔한 경우는 아니다.