[파이썬] Packing 과 Unpacking

    packing

    함수가 받을 인자의 갯수를 유연하게 지정할 수 있다면 코드를 유연하게 작성할 수 있다.

    이런 경우 사용하는 것이 packing이다.

    ex)

    def func(*args):
          print(args)
    
    func(1,2,3,4) # (1, 2, 3, 4) => tuple 형식

    packing을 이용해서 하나를 받는 매개변수와 여러개를 받는 매개변수를 구분해서 작성할 수 있다.

    ex)

    def printAnimal(cat,*dog,bird):
    	print("cat : ",cat)
        print("bird : ",bird)
        if dog:
        	print("dog :")
            for name in dog:
            	print(name, end="")
    
    printAnimal("냥이","멍이","초코","날개")
    # "cat :  냥이"
    # "bird :  날개"
    # "dog :  멍이 초코"

    Asterisk(*)를 두개 사용하여 작성하면 dictionary로 관리된다

    ex)

    def kwpacking(**kwargs):
         print(kwargs) 
    kwpacking(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3} => dictionary 형태

    unpacking

    packing과 반대로 여러개의 객체를 포함하고 있는 하나의 객체를 풀어주는 개념이다.

    ex)

    def sum(a,b,c):
    	return a+b+c
        
    sum([1,2,3]) # error
    sum(*[1,2,3]) # 6

    dictionary도 비슷한 방식으로 unpacking 할 수 있다.

    def cal(first, op, second):
        if op == '*':
            return first * second
    
    prob = {
      'first': 12,
      'second': 34,
      'op': '*'
    }
    
    cal(**prob) # 결과 : 408

    dictionary에서 unpacking을 한 후 dictionary끼리 더했을 때 key값이 중복되면 순서상 늦게 정의된 값이 이전 값을 오버라이드 한다.

    ex)

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

     

    2차원 리스트를 unpacking하는 경우

    ex)

    a,b,(c,d)=[1,2,3,4]
    print(a) #1
    print(b) #2
    print(c) #3
    print(d) #4

    댓글