오늘의 인기 글
최근 글
최근 댓글
Today
Total
12-30 00:00
관리 메뉴

우노

[Python] zip, 인자 언패킹(argument unpacking), *args, **kwargs 본문

Language/Python

[Python] zip, 인자 언패킹(argument unpacking), *args, **kwargs

운호(Noah) 2021. 4. 18. 15:54

zip

  • 여러 개의 순회 가능한(iterable)한 객체를 인자로 전달 받고,

  • 각 객체가 담고 있는 원소를 차례대로 접근하며 튜플의 형태로 묶고,

  • 요소 개수만큼의 새로운 iterable 객체를 생성하는 기능입니다.

  • 예제 코드

      list1 = ['a', 'b', 'c']
      list2 = [1, 2, 3]
    
      pairs = [pair for pair in zip(list1, list2)]
      print(pairs) 
      # [('a', 1), ('b', 2), ('c', 3)]

인자 언패킹(argument unpacking)

  • packing 은 여러 객체를 하나의 객체로 합치는 기능이라면,

  • unpacking 은 여러 객체를 포함하고 있는 객체를 다시 분리하는 기능입니다.

  • 매개변수가 아닌, 인자 앞에 * 또는 ** 을 붙여서 사용합니다.

    • 별 한개(*) : list, tuple 의 인자 언패킹
    • 별 두개(**) : dictionary 의 인자 언패킹 (a.k.a. 키워드 인자 언패킹)
  • 예제 코드 1

      # list 요소를 더하는 경우
      def add(a, b): 
          return a + b
    
      add(1, 2) # 3
      add([1, 2]) # TypeError
      add(*[1, 2]) # 3
  • 예제 코드 2

      # list 요소와 dictionary 요소를 더하는 경우
      def other_way(x, y, z):
          return x + y + z
    
      x_y_list = [1, 2]
      z_dict = {"z": 3}
    
      # list 인자 언패킹이 dictionary 인자 언패킹보다 앞에 있어야합니다.
      other_way(*x_y_list, **z_dict) 
      # 결과: 6

args, kwargs

  • *args : 여러 개의 일반 인자를 전달 받아, 튜플로 만들어주는 기능입니다.

  • **kwargs : 여러 개의 키벨류 인자를 전달 받아, 딕셔너리로 만들어주는 기능입니다.

  • 예제 코드

      def magic(*args, **kwargs):
          print("unnamed args:", args)
          print("keyword args:", kwargs)
    
      magic(1, 2, key1="word1", key2="word2")
      # unnamed args: (1, 2)
      # keyword args: {'key1': 'word1', 'key2': 'word2'}
Comments