이번 포스팅은 파이썬을 사용하면서
함수에서 *와 **를 이해하기 위해 작성하는 포스팅입니다.
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를 같이 쓰는 경우는 순서를 가장 중요하게 생각해야 합니다.
* 는 ** 의 무조건 앞에 있어야 합니다.
그래야 파이썬에서 범위를 인식하여 함수를 실행시키기 때문입니다.
제가 파이썬을 공부하면서 나왔던 * 와 ** 변수에 대해 알아보았고
파이썬이 다른 언어보다 쉽다고 하지만 그래도 깊이 들어갈수록 어려운 건 똑같은 것 같습니다.
다음 포스팅으로 찾아오겠습니다 :)
'Python > Python 정리' 카테고리의 다른 글
[Python] 가정 설정문 assert 정리 (0) | 2021.06.07 |
---|---|
[Python] __call__ 함수 정리 (2) | 2021.06.06 |
[Python] if __name__ == "__main__" 정리 (0) | 2021.05.09 |
[Python] 클래스(Class) (0) | 2021.05.05 |
Python , NumPy 기본 (1) (0) | 2020.12.01 |