[Python] *args, **kwargs
- Python/기초
- 2021. 8. 7.
앞서 포스팅한 패킹과 언패킹의 연장선입니다.
언패킹을 할때 나머지 변수는 *rest 로 묶을 수 있었는데요.
제가 변수로 정하고 싶지 않은 건 큰 관심이 없어서 변수지정을 안 주는데 갯수가 정해지지 않습니다.
갯수가 안 정해지지만 묶을 수 있는것과 마찬가지로
함수의 파라미터에서 갯수를 정할 수 없는 경우가 있습니다.
이런 맥락으로 파라미터의 갯수를 정할 수 없는 경우 *args, **kwargs로 표시할 수 있습니다.
별 기호(*)가 중요한것이지 args는 바꿀 수 있습니다. 관용상 이렇게 쓰면 모두가 알 수 있기 때문에 쓰는 것뿐입니다.
*args
args는 arguments의 줄임말로 인수들이라는 뜻입니다.
단어의 뜻처럼 인수들을 넣으면 되는 것입니다.
예제로 패킹과 언패킹에서 보인 정가 구하는 함수를 그대로 가져오겠습니다.
이 함수에서 파라미터 변수 이름을 *args로 바꿨습니다.
import numpy as np
def list_price(rate,*args):
cal = (1+rate)*np.array(args)
return list(cal)
list_price(0.15,1000,2000,3000,4000)
1000부터 4000까지는 필수 변수가 아니고 *args에 소속된 변수들입니다.
원하는만큼 늘려서 쓸 수 있습니다.
변수에 끝을 정할 수 없기 때문에함수에 *args를 넣고 싶다면 파라미터 설정할 때
맨 뒤에 해야만 오류없이 함수가 완성됩니다.
**kwargs
kwargs는 keyword arguments에 줄임말고 키워드 인수라는 뜻인데
'키워드=인수'로 형태로 입력하면 딕셔너리로 출력하게 됩니다.
def item_list(**kwargs):
return kwargs
item_list(item1='사과',item2='수박')
위와 같이 kwargs를 return하면 딕셔너리로 나오게 됩니다.
*args와 **kwargs 같이 쓰기
*args와 **kwargs를 같이 쓰고 싶다면 *args를 **kwargs 앞에 둡니다.
방금 만든 정가 리스트를 목록 정리를 해보겠습니다.
참고로 *args, **kwargs를 써보기 위해 하는 예제라서 효율적인 함수는 아닙니다.
def list_price(rate,*args,**kwargs):
arrange = {}
cal = list((1+rate)*np.array(args))
for index in range(len(cal)):
key = list(kwargs.keys())
value = list(kwargs.values())
arrange[key[index]] = (value[index],cal[index])
return arrange
list_price(0.15,1000,2000,3000,4000,item1='사과',item2='수박',item3='딸기',item4='참외')
이런 식으로 *args와 **kwargs를 사용해서 함수를 만들 수 있습니다.
관련 포스팅
[Python/기초] - [Python] 패킹과 언패킹
'Python > 기초' 카테고리의 다른 글
pip 직접설치하기 (0) | 2021.08.29 |
---|---|
[Python] Generator(제너레이터) (0) | 2021.08.09 |
[Python] 패킹과 언패킹 (6) | 2021.08.02 |
[Python] 튜플 정렬하기 (2) | 2021.07.17 |
[업무자동화] 작업스케쥴러 작업이름 바꾸기 (0) | 2021.07.16 |