티스토리 뷰
파이썬 함수 구현 중 특히 커맨드 라인 입력처럼 다양한 갯수의 옵션이 필요한 경우 *args나 **kwargs 구문을 많이 보았다. 습관적으로 그려려니 하고 넘어가다가 사용법을 한번 정리하는 것이 좋겠다는 생각이 들어 이곳에 간단히 정리한다.
*args 이해하기
함수의 파라미터 영역에 *args가 들어 있는 경우 입력 데이터가 몇개일지 모르는 경우에 사용한다. 여기서 중요한 것은 args가 아니고 *인 것을 최근에 알았다. *는 함수의 인자로 들어로는 데이터가 몇개인지 모르겠으나 해당 변수명으로 모아서 처리하겠다는 뜻이다.
다음과 같이 *names 로 인자를 하나로 선언하고 들어오는 것을 tuple과 같이 처리하는 함수를 구현한다.
def test_args(*names):
for name in names:
print(name)
구현한 함수 test_args는 다음과 같이 다양하게 사용이 가능하다. 입력하는 데이터의 갯수를 마음대로 넣어서 사용이 가능하다.
test_args('steve',48)
# 실행결과
steve
48
test_args('steve','angela','tomson')
# 실행결과
steve
angela
tomson
입력한 데이터를 하나의 자료구조에 넣어두었다가 함수를 호출할 때 다음과 같이 *를 앞에 넣는 것을 주의하면 된다.
name_list = ['steve','angela','tomson']
test_args(*n)
# 실행 결과
steve
angela
tomson
**kwargs 이해하기
**두개로 표시되는 kwargs는 kw가 keyword를 뜻한다. 즉 입력 인자를 *args가 tuple 형태로 넣는 것이라면 **kwargs는 각 파라미터를 딕셔너리 형태로 관리해서 받겠다는 뜻이다. 즉 key값과 해당 value값으로 짝을 이루어서 함수 입장에서는 순서가 바뀌던 말던 해당 keyword로 데이터를 분리해서 처리할 수 있다는 뜻이 된다.
예를 들어 다음과 같이 **를 이용해 함수를 구현할 수 있다.
def test_kwargs(**args):
for key, value in args.items():
print('key=', key, 'value=',value)
**args는 딕셔너리 형태의 인자로 딕셔너리에서 key, value값을 뽑아 사용할 수 있게 된다.
함수의 사용방법은 다음과 같다.
test_kwargs(first_name='steve', last_name='jobs', age=48)
# 실행 결과
key= first_name value= steve
key= last_name value= jobs
key= age value= 48
자유롭게 key값과 value값을 형식에 맞게 넣으면 동작하게 된다.
역시 다음과 같이 미리 저장된 딕셔너리에 필요한 값을 넣어두고 사용할 수 있다.
sample = { 'first_name': 'steve', 'last_name': 'jobs', 'age': 48}
test_kwargs(**sample)
# 실행결과
key= first_name value= steve
key= last_name value= jobs
key= age value= 48
역시 여기서도 주의할 점은 함수를 호출할 때 준비된 딕셔너리 변수 앞에 **를 붙여주면 된다.
'Programming > python' 카테고리의 다른 글
파이썬 코딩 스타일 가이드(Python Coding Style) (1) | 2019.09.26 |
---|---|
파이썬 패키지 리스트(requirements.txt) 만들기 (0) | 2019.09.01 |
Pandas 로 CSV 파일 읽기 (0) | 2019.06.23 |
Kaggle API로 머신러닝 데이터 다운받기 (1) | 2019.06.17 |
[python] localtime으로 로컬 시간 정보 만들기 (0) | 2019.05.30 |
- Total
- Today
- Yesterday
- opencv
- ssh
- MicroBit
- vscode
- 3d프린터
- 단축키
- tensorflow
- Maker
- Linux
- cura
- Python
- git
- 메이커
- nodejs
- nvidia
- Fusion360
- Streamlit
- 우분투
- comfyUI
- Arduino
- conda
- CAD
- docker
- ubuntu
- vvvv
- 한글
- 파이썬
- Stable Diffusion
- fablab
- WSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |