파이썬(Python)/문법

파이썬 *args, **kwargs 의미와 예제를 통해 이해하기

끄적끄적아무거나 2021. 4. 24. 09:51
반응형

파이썬 *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")

  

 

 

 

반응형