이전 두 글에서 *arg와 **kwargs 사용법을 알아보았다. 게시글을 확인하고 싶으면 아래 링크로 들어가서 찬찬히 읽어보도록 하자.
2022.08.14 - [개발일기/PYTHON [codecademy]] - *args (Function Arguments)
2022.08.14 - [개발일기/PYTHON [codecademy]] - **kwargs (Function Arguments)
*args와 **kwargs 둘 다 무한한 수의 인자를 받을 수 있는 편리한 애들이다. 그렇다면 이 둘을 함께 사용해서 함수를 만들 수는 없을까?
이번 글에서는 두 가지를 모두 사용하여 함수를 만들어 볼 거다.
def print_animals(animal1, animal2, *args, animal4, **kwargs):
print(animal1, animal2)
print(args)
print(animal4)
print(kwargs)
print_animals('Snake', 'Fish', 'Guinea Pig', 'Owl', animal4='Cat', animal5='Dog')
#output:
Snake Fish
#첫 번째 입력값이 그대로 animal1에 저장
('Guinea Pig', 'Owl')
#두 번째 입력값은 animal2에 저장되고, animal4로 지정된 'Cat'전까지의 입력값이 *arg에 저장
Cat
{'animal5': 'Dog'}
#입력한 animal5(key)='Dog'(value)가 dict 형태로 저장
animal1과 animal2는 위치 지정 인자이므로 괄호 안 animal1과 animal2의 위치에 있던 'Snake'와 'Fish'가 각각 animal1과 animal2에 저장되었다. 그다음은 *arg, animal4 순서로 입력이 되었기 때문에 *arg가 지정되는 범위를 정확히 설정해줘야 한다. 따라서 animal4='Cat'으로 stop지점을 설정했고, animal2 위치 이후부터 'Cat'이전까지가 *arg의 값으로 저장되었다. 맨 마지막에 **kwargs는 key와 value를 모두 입력해서 dict형태로 저장되도록 했다.
정리
*args 와 **kwargs는 함께 쓸 수도 있음
**kwargs는 모든 positional arguments의 뒤에 와야 함 (무조건 맨 뒤로 빼자)
*arg는 지정된 위치 안에 있는 모든 입력값을 저장함
연습문제
#Checkpoint 1-2
def single_prix_fixe_order(appetizer, *entrees, sides, **dessert_scoops):
print(appetizer)
print(entrees)
print(sides)
print(dessert_scoops)
#Checkpoint 3
single_prix_fixe_order('Baby Beets', 'Salmon', 'Scallops', sides='Mashed Potatoes', scoop1='Vanilla', scoop2='Cookies and Cream')
output:
Baby Beets
('Salmon', 'Scallops')
Mashed Potatoes
{'scoop1': 'Vanilla', 'scoop2': 'Cookies and Cream'}
'개발일기 > PYTHON [codecademy]' 카테고리의 다른 글
*args와 **kwargs (2) (Function Arguments) [Intermediate] (0) | 2022.08.14 |
---|---|
**kwargs (Function Arguments) (0) | 2022.08.14 |
*args (Function Arguments) (0) | 2022.08.14 |
Recap (Function Arguments) (0) | 2022.08.14 |
[codecademy] 파이선 초보 단계 끝! (0) | 2022.08.13 |
댓글