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 직접 대입, 언패킹
# 키워드 인자(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.
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 재귀함수, 람다 함수 연습 (0) | 2020.09.21 |
---|---|
[python] 파이썬 datetime(), time(), localtime() (0) | 2020.09.20 |
[python] 파이썬의 변수, 객체, 그리고 참조 주소 (0) | 2020.09.19 |
[python] 파이썬의 진수 변환(2진수, 8진수, 10진수, 16진수) (0) | 2020.09.18 |
[python] 파이썬 스태틱(static) 메서드와 클래스(class) 메서드 (0) | 2020.09.17 |
댓글