Python/Python 정리

[Python] *args와 **kwargs 정리

우준세 2021. 5. 23. 22:32
반응형

 

 

이번 포스팅은 파이썬을 사용하면서 

함수에서 *와 **를 이해하기 위해 작성하는 포스팅입니다.

 


1. *args 이해 

- args는 arguments의 줄임말입니다. 함수 인자로 *args를 대표적으로 쓰지만 다르게 써도 아무 상관이 없습니다.

- 결론적으로 *args는 함수에서 여러 개의 매개변수를 쓰기 위해 사용하는 것입니다. 

 

def location(kor ,*args):
	print(kor, args)
    
location("한국", "부산")

location("한국", "서울", "부산", "대전", "대구")

 

예를 들어 위치를 출력하는 함수를 만들었을때 *args를 사용하여 출력하도록 하였습니다.

 

 

결과를 보시면 *args 로 받은 매개변수는 튜플로서 출력하는 것을 볼 수 있었고 

여러 개의 인자를 주어도 출력이 잘 되는 것을 볼 수 있습니다. 

 

그러나 *args와 kor을 바꾸면 어떻게 될까요? 

 

결과는 오류가 뜹니다.

그 이유는 *args 로 들어오는 인자들의 범위를 알 수 없기 때문입니다.

어디서부터 어디까지 지역명인지 알 수 없기 때문에 오류가 뜹니다.

 

그러므로 *args를 사용할 때 생각해야 하는 것은

첫 번째, 결과는 튜플의 형태로 출력된다는 것 

두 번째, 위치입니다. 

 


2. **kwargs 이해 

- kwargs는 keyword argument의 줄임말입니다. 

- 결과적으로 **kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있습니다. 

 

def location(kor, **kwargs):
	print(kor, kwargs)
    
location("한국", 경상도 = "부산", 경기도 ="수원" , 강원도 = "강릉")

 

앞에 만든 코드와 비슷하지만 args에 kwargs를 넣어 함수를 만들었습니다.

 

 

결과를 보시면 args와 다르게 딕셔너리로 결과 값이 출력되는 것을 볼 수 있습니다.


3. *args 와 **kwargs를 같이 쓰는 경우 

 

def location(kor, *args, **kwargs):
	print(kor, args, kwargs)
    
location("한국", "부산", "수원", "강릉", 경상도 = "부산", 경기도 ="수원" , 강원도 = "강릉")

 

위와 같이 args 와 kwargs를 같이 쓰는 경우는 순서를 가장 중요하게 생각해야 합니다.

* 는 ** 의 무조건 앞에 있어야 합니다. 

그래야 파이썬에서 범위를 인식하여 함수를 실행시키기 때문입니다.

 

 

제가 파이썬을 공부하면서 나왔던 * 와 ** 변수에 대해 알아보았고 

파이썬이 다른 언어보다 쉽다고 하지만 그래도 깊이 들어갈수록 어려운 건 똑같은 것 같습니다.

 

 

다음 포스팅으로 찾아오겠습니다 :)

 

 

 

728x90
반응형