본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 15. 함수 호출과 매개변수 선언에 있어서 *와 **의 사용 규칙

출처 : 윤성우의 열혈 파이썬 : 중급

15. 함수 호출과 매개변수 선언에 있어서 와 *의 사용 규칙

iterable 객체와 매개변수

  • func(*iterable) : iterable 객체를 전달하면서 *을 붙여서 함수 호출할 때
    • 리스트/튜플/문자열을 풀어서 전달
  • func(*dict) : dict 객체를 전달하면서 *을 붙여서 함수 호출할 때
    • 딕셔너리의 값을 풀어서 전달
  • def func(*args) : 함수를 정의하면서 매개변수 args에 * 붙일 때
  • def func(*args) : 함수를 정의하면서 매개변수 args에 * 붙일 때

func(*iterable)

def who(a, b, c):
    print(a, b, c, sep = ', ')

# list
who(*[1, 2, 3])         # 1, 2, 3

# tuple
who(*(0.1, 0.2, 0.3))   # 0.1, 0.2, 0.3

# string
who(*'abc')             # a, b, c

func(**dict)

d = dict(a = 1, b = 2, c = 3)

# *을 붙이면 키가 매개변수에 전달
who(*d)                 # a, b, c
# **을 붙이면 값이 매개변수에 전달
who(**d)                # 1, 2, 3

# 키와 값을 튜플로 묶어서 함수에 전달
who(*(d.items))         # ('a', 1), ('b', 2), ('c', 3)

딕셔너리와 매개변수

def func(*args):
    print(args)             # args는 tuple

func()      # ()
func(1)     # (1,)
func(1,2)   # (1, 2)
func(1,2,3) # (1, 2, 3)

def func2(**args):
    print(args)             # args는 dict

func(a = 1)                 # {'a': 1}
func(a = 1, b = 2)          # {'a': 1, 'b': 2}
func(a = 1, b = 2, c = 3)   # {'a': 1, 'b': 2, 'c': 3}

def func3(*args1, **args2):
    print(args1)
    print(args2)

func()
func(1, a = 1)
func(1, 2, a = 1, b = 2)