[python]packing & unpacking

2168 단어 pythonpython

packing

패킹은 인자로 받은 여러개의 값을 하나의 객체로 합쳐서 받을 수 있게 한다. 위치인자 패킹은 * 한개를 매개변수 앞에 붙임으로 사용한다.

def func(*args):
      print(args)
      print(type(args))
func(1, 2, 3, 4, 5, 6, 'a', 'b')

# 결과
(1, 2, 3, 4, 5, 6, 'a', 'b')
<class 'tuple'>

키워드 인자에 패킹은 ** 을 통해 작성할 수 있다.

def kwpacking(**kwargs):
     print(kwargs)
     print(type(kwargs)

kwpacking(a=1, b=2, c=3)

# 결과
{'a': 1, 'b': 2, 'c': 3}
<class 'dict'>

unpacking

packing은 여러개의 객체를 하나의 객체로 합쳐준다. unpacking은 여러개의 객체를 포함하고 있는 하나의 객체를 풀어준다. 함수에서 unpacking을 할때는, 매개변수에서 *을 붙이는게 아니라 인자 앞에 *을 붙여서 사용해야한다.

def sum(a, b, c):
    return a + b + c

numbers = [1, 2, 3]
sum(numbers) # error 발생

print(sum(*numbers)) 
# 출력 : 6

unpacking은 함수를 호출할때 인자를 해체하는 개념이기 때문에, 해체된 결과가 함수의 매개변수에 갯수와 다르다면 에러가 발생한다.

sum(*[1, 2, 3, 4]) # error 발생
(TypeError: sum() takes 3 positional arguments but 4 were given)

동일한 방식으로 키워드인자로 unpacking할 수 있다. unpacking하기 위해선 인자가 key와 인자로 구성되어 있는 mapping타입, 즉 dict타입이 필요하다.

def cal(first, op, second):
    if op == '+':
        return first + second
    if op == '/':
        return first / second
    if op == '-':
        return first - second
    if op == '*':
        return first * second

prob = {
  'first': 12,
  'second': 34,
  'op': '*'
}

cal(**prob) # 결과 : 408
# cal(first=12, second=34, op='*')와 같이 동작

위치인자의 unpacking처럼 unpacking되는 인자는 매개변수의 키워드 매개변수와 일치해야한다.

packing, unpacking은 python argparse 라이브러리와도 관련이 있는데 이는 추후에 다루겠다.

출처

  1. https://wikidocs.net/22801

좋은 웹페이지 즐겨찾기