파이썬에서 print 함수는 출력하고자 하는 인자를 몇개를 받는지에 무관하게 출력해준다.
print("가나다 abc 123")
print("가나다", "abc 123")
print("가나다", "abc", "123")
# 결과
가나다 abc 123
가나다 abc 123
가나다 abc 123
어떻게 이러한 현상이 가능할까?
python의 print()
documentation을 살펴보면 다음과 같다.
여기서 objects
앞에 붙은 *
이 바로 packing
을 가능하게 한다.
packing
은 인자로 받은 여러 개의 값을 하나의 객체로 합쳐 다시 받을 수 있도록 한다.
위치 인자 패킹
매개변수 이름 앞에
*
을 붙인다.
a = [1,2,'a','b']
def func(*args):
print(args)
func(a)
# 결과
([1, 2, 'a', 'b'],)
위치인자가 패킹하는 매개변수를 만나면 위치인자가 몇개이던지, 하나의 tuple
로 관리된다.
키워드 인자 패킹
매개변수 이름 앞에
**
을 붙인다.
def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3)
# 결과
{'a': 1, 'b': 2, 'c': 3}
키워드 인자는 패킹한 인자들을 키워드와 인자 쌍으로 이루어진 dictionary
로 관리한다.
unpacking
packing
과 반대되는 unpacking
이 존재한다.
unpacking
은 여러 객체를 포함한 하나의 객체를 풀어준다.
매개변수에
*
을 붙이는 게 아니라, 인자 앞에*
을 붙인다.
def sum(a, b, c):
return a+b+c
numbers = [1,2,3]
sum(*numbers)
# 결과
6
unpacking
은 해체된 결과가 매개변수의 갯수와 다르면 에러가 발생한다.
codeforce에서 간단한 문제를 풀다가 이거 때문에 막혔다. 기본부터 흔들리는 느낌...