[파이썬] packing

4820 단어 파이썬파이썬

파이썬에서 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에서 간단한 문제를 풀다가 이거 때문에 막혔다. 기본부터 흔들리는 느낌...

좋은 웹페이지 즐겨찾기