[Python] packing과 unpacking

cdwde·2021년 5월 6일
0

🎈 packing

  • 인자로 받은 여러개의 값을 하나의 객체로 받을 수 있도록 함
  • 위치 인자가 패킹하는 매개변수를 만나면 tuple로 하나의 객체가 되어 관리
  • 매개변수에 * 붙여서 사용
def func(*args):
    print(args)
    print(type(args))

func(1, 2, 3)

#출력 결과
#(1, 2, 3)
#<class 'tuple'>

  • 반드시 받아야하는 매개변수와 여러개를 받을 수 있는 매개변수를 구분해 작성할 수 있음
def func(one, two, *args):
    print(one, two)
    print(args)

func(1, 2, 3, 4, 5, 6)

#출력 결과
#1 2
#(3, 4, 5, 6)

  • **을 통해 키워드 인자 패킹
  • 키워드 인자는 패킹한 인자들을 딕셔너리로 관리
def kwpacking(**kwargs):
    print(kwargs)
    print(type(kwargs))

kwpacking(one=1, two=2, three=3)

#출력 결과
#{'one': 1, 'two': 2, 'three': 3}
#<class 'dict'>
def func(one, two, **kwargs):
    print(one, two)
    for key, value in kwargs.items():
        print(f'{key} : {value}')

func(1, 2, three=3, four=4)

#출력 결과
#1 2
#three : 3
#four : 4

  • 위치 인자와 키워드 인자 packing을 동시에 할 수 있음
def func(*args, **kwargs):
    print(args[0])
    print(args[1])
    for key, value in kwargs.items():
        print(f'{key} : {value}')

func(1, 2, three=3, four=4)

#출력 결과
#1
#2
#three : 3
#four : 4

  • packing을 통해 swap을 쉽게 할 수 있음
a,b = b,a

🎈 unpacking

  • 여러개의 객체를 포함하고 있는 하나의 객체를 풀어줌
  • 인자 앞에 * 붙여서 사용
  • 해체된 결과가 함수의 매개변수의 개수와 다르면 에러
  • Container 객체라면 다 가능 (set, dict는 순서 정보 가지고 있지 않아서 결과가 다를 수 있음)
def func(a, b, c):
    return a + b+ c

nums = [1, 2, 3]
print(func(*nums))

# func(*nums) -> func(*[1, 2, 3]) -> func(1, 2, 3) 순서로 진행

  • 키워드 인자로 unpacking
  • key와 인자로 구성되어 있는 dict 필요
def func(a, b, c):
    return a + b+ c

nums = {'a':1, 'b':2, 'c':3}
print(func(**nums))

#func(**nums) -> func(nums = {'a': 1, 'b' : 2, 'c' : 3}) -> func(a=1, b=2, c=3) 순서로 진행

참고
https://wikidocs.net/22801

0개의 댓글