[python]packing & unpacking
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 라이브러리와도 관련이 있는데 이는 추후에 다루겠다.
출처
Author And Source
이 문제에 관하여([python]packing & unpacking), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@optjyy/pythonpacking-unpacking저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)