본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬 함수의 위치 인자, 키워드 인자 언패킹

by good4me 2020. 9. 19.

goodthings4me.tistory.com

 

■ 파이썬의 함수 인자(함수를 호출할 때 함수로 전달되는 값)에는 위치 인자 (positional argument)와 키워드 인자 (keyword argument) 인자가 있다. 위치 인자 (positional argument)들은 인자 중 처음에 나오거나 이터러블의 앞에 '*' 기호를 붙여 전달할 수 있는 인자를 말하고, 키워드 인자 (keyword argument)는 함수 호출 때 식별자가 앞에 붙은 인자 (예를 들어, name= ) 또는 '**' 기호를 앞에 붙인 딕셔너리로 전달되는 인자를 말한다.

def func(st):
    return st

p = [1, 3, 5]
print(func(p))  # [1, 3, 5]

print(func([1, 3, 5]))  # [1, 3, 5]

#print(func(1, 2, 3))
# TypeError: func() takes 1 positional argument but 3 were given


def func1(a, b, c, d):
    return a, b, c, d  # 튜플로 리턴

print(func1(1, 2, 3, 4))  # (1, 2, 3, 4)

lst = [5, 6, 7, 8]

#print(func1(lst))
# TypeError: func1() missing 3 required positional arguments: 'b', 'c', and 'd'

#print(func1([5, 6, 7, 8]))
# TypeError: func1() missing 3 required positional arguments: 'b', 'c', and 'd'

print(func1(*lst))  # (5, 6, 7, 8)
# 리스트나 튜플 등의 객체에 '*' 표시를 붙여 인자로서 입력하면, 언패킹(풀어져)되어 함수의 인자 각 위치에 맡게 입력된다.

ls = [5, 6, 7]
#print(func1(*ls))  # 언패킹된 인자의 수가 안맞으면 에러 발생
# TypeError: func1() missing 1 required positional argument: 'd'

 

# 함수 정의 시 언패킹을 사용하면, 받는 인자수에 제한이 없어진다.

def func2(*arg):
    return arg

print(func2(lst))  # ([5, 6, 7, 8],) --> 변수 lst는 한 개의 인자임

print(func2(*lst))  # (5, 6, 7, 8) --> 언패킹되어 4개의 숫자로 대입

print(func2(*[5, 6, 7, 8]))  # (5, 6, 7, 8)  --> list 직접 대입, 언패킹

good4me.co.kr

 

# 키워드 인자(keyword argument) 언패킹 - 키워드 인자 언패킹은 키와 값이 있는 dict 타입 변수에 '**' 표시를 대입함

def fruits1(banana, apple, pear):
    return banana + apple + pear

f = {'banana': 10, 'apple': 15, 'pear': 5}
print('fruits sum =', fruits1(**f))  # fruits sum = 30


def fruits2(**kwargs):
    sum = 0
    for v in kwargs.values():
        sum += v
    return sum


f = {'banana': 10, 'apple': 15, 'pear': 5, 'orange': 20}

print(fruits2(**f))  # 50

 

Life is Short, Use Python.

 

댓글