파이썬 *args, **kwargs 의미와 예제를 통해 이해하기
예제 코드>>
def a_func(*args, **kwargs):
print(args)
print("###########")
for key, value in kwargs.items():
print(key)
print(value)
print("1번 예제")
a_func(name='kc')
print("")
print("2번 예제")
a_func("hi", name='kc')
print("")
print("3번 예제")
a_func("hi", {"myname",'kc'})
print("")
print("4번 예제")
a_func(1,2,3)
print("")
코드 결과>>
1번 예제
()
###########
name
kc
2번 예제
('hi',)
###########
name
kc
3번 예제
('hi', {'myname', 'kc'})
###########
4번 예제
(1, 2, 3)
###########
주석>>
args 는 argument를 줄인말로 인자값을 받겠다는 의미이다. 앞에 별표는 메모리 주소를 찾아서 값을 읽어준다는 의미이다. 예를 들어 2번 예제는 'hi' 라는 string 값이 인자로 들어갔다. 하지만 실제 hi 값을 a_func 에 넣기는 비효율적이라 파이썬에서 'hi'를 가진 주소값을 보내주고 *(별표)에 의해 주소안의 값을 가져 오는 것이다.
kwargs는 dictionary 형태로 값을 읽고 이 때 key와 value 값을 가지기 때문에 별표 ** 두개를 사용한다. 하지만 예제3번처럼 dictionary를 집어 넣으면 묶어서 args 로 인식한다. karg 로 값을 받기 위해서는 key값 = value값 형식으로 넣어야한다.
app=Tk()
app.configure(width="10",height="20")
app.mainloop()
파이썬에서 그래프 만드는 tkinter 라이브러리를 쓸때 위 예제처럼 width와 height을 kwarg 방식을 사용해서 만든 것이다.
결론을 간단하게 정리하면 아래와 같다.
1. *args 형식을 사용하면 key, value를 받는 형식을 제외한 모든 형식을 인자로 받을 수 있다.
2. **kwarg 를 사용하면 key, value를 받는 형식의 인자를 받을 수 있다.
3. *args 나 **kwarg 중 어느 것을 쓰든 받는 인자 양식이 맞으면 예제4번 처럼 여러개의 인자를 받을 수 있다.
4. *args **kwarg 를 같이 사용하면 어떤 형태의 인자이든 다 받겠다는 의미이다.
5. 4번 사용중 제한점은 순서는 지켜져야한다는 것이다. 가령 예를 들어 아래 코드처럼 작성하면 오류가 발생한다.
a_func({"myname",'kc'}, "hi")
'파이썬(Python) > 문법' 카테고리의 다른 글
파이썬 Class 상속(Inheritance)란? (예제로 알아보기) (0) | 2021.06.30 |
---|---|
파이썬 폴더위치에 따른 import 방법 (상위,하위,동일 폴더 위치)을 예제로 이해하기 (0) | 2021.05.22 |
파이썬에서 @(골뱅이, 데코레이터라고 불림)이란? 사용방법과 예제 (2) | 2021.04.22 |
파이썬 함수 안에 중첩(nested)해서 함수 넣기 (0) | 2021.04.21 |
파이썬(Python) 속성 중 __name__ 이란? (0) | 2021.04.15 |