Introduction
파이썬을 처음 접했을 때, 무슨 뜻인지 몰라 헤매던 적이 있던 내용을 차근차근 정리하고자 합니다.
파이썬 라이브러리 코드를 보다가 함수의 인자에 작성된 내용을 보고 당황했던 적 있습니다.
# a function
func(*args, **kwargs)
어떤 의미인지 차근차근 알아가보겠습니다.
*args, 위치인자
아래와 같은 함수가 있다고 해봅시다.
def sum_val(a, b):
return a+b
이 함수는 a, b 두 가지 인자를 입력으로 받아 합을 내는 함수입니다.
하지만, 이 함수를 사용하는 사용자는 두 변수 이상을 입력하여 합을 도출하고 싶습니다.
이 함수는 적절하지 못하기 때문에 아래와 같은 함수를 만들어 볼 수 있습니다.
def sum_val_list(value_list):
answer = 0
for val in value_list:
answer += val
return answer
위 함수는 입력에 여러 가지 변수를 넣어 합을 도출할 수 있으나, 입력 인자가 반드시 "리스트 형" 이여야 합니다. 즉, 이 함수를 사용하는 사용자는 "리스트"를 구성하여 입력해주어야 합니다.
이런 경우 *args를 사용하여 해결할 수 있습니다.
def sum_val_args(*args):
answer = 0
#*args를 통해 받은 인자를 리스트형으로 받아 냅니다.
for val in args:
answer += val
return answer
*args는 함수 내에서 args로 리스트형을 받아내기 때문에 위치 인자를 저장합니다. 리스트로 하나하나 받아내기 때문에 위치인자를 받기 위해 사용되는 것이죠.
*args 적용 전에는 사용자가 아래와 같이 사용해야 했습니다.
sum_val_list([1,2,4])
*args를 적용한 함수는 아래와 같이 사용이 가능합니다.
sum_val_args(1,2,4)
위치 인자와 키워드 인자???
function(1, 2, a=3, b=4)
위와 같은 함수가 있을 때, 1과 2는 위치 인자이며 a, b는 키워드 인자로 값을 받는 함수입니다.
이때, 반드시 위치 인자와 키워드인자는 위치인자 다음에 키워드 인자가 와야 합니다.
**kwargs 키워드 인자
이번엔 **kwargs를 이해하기 위해서는 또 다른 예시의 함수를 정의해보겠습니다.
def print_keyword(name, university):
print("name: ", name)
print("university: ", university)
위 함수는 name, university라는 변수를 받아 출력합니다. 하지만, 사용자가 새로운 파라미터를 추가하고 싶다면, 이 함수를 바꾸어야 할 것입니다. 굉장히 번거로운 일이 될 것입니다.
그래서 "딕셔너리 형"을 이용해서 아래와 같은 함수를 만들 수 있을 것입니다.
def print_keyword_dict(dictionary):
for key in dictionary:
print(key + ": " + dictionary[key])
위 함수는 dictionary를 받아서, key를 통해 해당 값을 출력할 수 있기 때문에 dictionary에 새로운 파라미터를 추가하여 출력할 수 있습니다. 하지만, "딕셔너리 형"을 구성해야 한다는 불편한 점이 있습니다.
이런 경우 **kwargs를 사용하여 해결할 수 있습니다.
def print_keyword_kwargs(**kwargs):
for key in kwargs:
print(key + ": " + kwargs[key])
**kwargs는 함수 내에서 kwargs로 딕셔너리 형을 받아내기 때문에 키워드 인자를 저장합니다.
# **kwargs 적용 전 함수
print_keyword_dict({"name":"jaehwan", "university":"seoul", "studentID":"123155"})
# **kwargs 적용 후 함수
print_keyword_kwargs(name="jaehwan", university="seoul", studentID="123155")
훨씬 깔끔하고, 사용하기 편한 함수가 된 거 같습니다.
요약
- 함수에 위치 인자를 받고 싶을 때! -> *args 사용! 리스트형으로 받아내기 때문에 위치(순서)대로 받아 처리!
- 함수에 키워드 인자를 받고 싶을 때! -> **kwargs 사용! 딕셔너리형으로 받아내기 때문에 키워드에 따라 값을 받아 처리!
https://www.geeksforgeeks.org/args-kwargs-python/
'Programming > Python' 카테고리의 다른 글
파이썬 f-string (0) | 2021.12.31 |
---|---|
파이썬 모듈이란? 패키지란? (0) | 2021.07.01 |
파이썬 PEP8 스타일 가이드 정리 (0) | 2021.07.01 |
파이썬 클래스 상속 (0) | 2021.06.28 |
numpy flip을 활용한 DICOM 이미지 반전 대칭 (0) | 2021.06.25 |