-
[Python] 함수 가변인자 *args, **kwargs 사용법 알아보기Python/파이썬 기초 2023. 8. 22. 09:39반응형
파이썬 함수에서 가변인자 *args, **kwargs 사용법 알아보기
우리가 프로그래밍을 하다보면 함수를 사용하기 마련입니다. 그리고, 파이썬(Python)에서 함수를 쓰다보면 간혹 이상한 표현이 눈에 띄기도 하지요. 바로 *args, 또는 **kwargs라는 표현입니다. 이 두 가지 표현은 가변인자 (Variadic Arguments) 라고 표현하는데요, 굳이 사용하지 않더라도 대부분의 프로그래밍 과정에는 문제가 없지만 알고 있다면 코드 작성의 편의성이 크게 늘어나기 때문에 알아두시는 것을 추천드립니다.
*args의 용도 알아보기
*args는 파이썬의 가변인자 중에서 몇개를 입력할지 모르는 상황에서 사용하는 표현입니다. 파이썬의 함수에서 어떤 값을 받을때는 몇개를 받을지 명시를 하는 것이 보통입니다. 하지만, *args 표현을 사용하게 된다면, 내가 나중에 이 함수를 이용해서 값을 하나만 입력할지, 아니면 여러개를 입력할지 모르는 상황에서 유연한 함수 정의를 할 수 있다는 장점이 있답니다.
*args의 사용 예시는 아래와 같습니다. 이 문서에서는 args라고 적긴 했지만 이건 개발자들 사이의 암묵적인 표현 방법으로, 원한다면 *hello, *var1 등의 표현도 가능하니 굳이 똑같이 적지 않아도 된다는 점을 유의해 주세요.
def function1(*args): for i in args: print(i) function1('hello', 2, [321], {478}, (500, 499))
hello 2 [321] {478} (500, 499)
# *args 표현을 사용하지 않는다면 TypeError가 발생합니다 def function1(args): for i in args: print(i) function1('hello', 2, [321], {478}, (500, 499))
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[2], line 6 3 for i in args: 4 print(i) ----> 6 function1('hello', 2, [321], {478}, (500, 499)) TypeError: function1() takes 1 positional argument but 5 were given
**kwargs의 용도 알아보기
앞서 살펴본 *args와 같이, **kwargs도 파이썬의 가변인자입니다. 이 역시 함수에 사용했을 때 *args와 동일한 역할을 할 수 있는데요, 특이한 점은 **kwargs는 키워드 파라미터 (keyword parameter) 를 입력할 때만 사용할 수 있다는 점입니다. 이러한 특징을 이용하면, 함수에서 어떤 값을 키워드와 함께 입력했을 때 입력한 키워드를 함께 이용할 수 있다는 장점이 있지요. 코드를 적어서 예를 들어보면 아래와 같습니다.
def function2(**kwargs): for i, j in kwargs.items(): print(i, j) function2(greeting = 'hello', no2 = 2, list1 = [321], set1 = {478}, tuple1 = (500, 499))
greeting hello no2 2 list1 [321] set1 {478} tuple1 (500, 499)
# **kwargs 표현을 쓸 때는, 키워드 파라미터가 아닌 경우 에러가 발생합니다 def function2(**kwargs): for i, j in kwargs.items(): print(i, j) function2('hello', no2 = 2, list1 = [321], set1 = {478}, tuple1 = (500, 499))
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[4], line 6 3 for i, j in kwargs.items(): 4 print(i, j) ----> 6 function2('hello', no2 = 2, list1 = [321], set1 = {478}, tuple1 = (500, 499)) TypeError: function2() takes 0 positional arguments but 1 was given
*args, **kwargs 함께 사용하기
만약에 어떤 변수를 설정하면서 일반 파라미터와 키워드 파라미터를 혼용해서 사용할 수도 있습니다. 이 때는, *args, **kwargs를 함께 사용해서 문제를 해결할 수 있지요.
def function2(*args, **kwargs): for a in args: print(a) for i, j in kwargs.items(): print(i, j) function2('hello', no2 = 2, list1 = [321], set1 = {478}, tuple1 = (500, 499))
hello no2 2 list1 [321] set1 {478} tuple1 (500, 499)
# *args, **kwargs를 함께 사용할 때는 일반 파라미터, 키워드 파라미터 순서로 작성해야 합니다 def function2(*args, **kwargs): for a in args: print(a) for i, j in kwargs.items(): print(i, j) function2(greeting = 'hello', 2, list1 = [321], set1 = {478}, tuple1 = (500, 499))
Cell In[6], line 8 function2(greeting = 'hello', 2, list1 = [321], set1 = {478}, tuple1 = (500, 499)) ^ SyntaxError: positional argument follows keyword argument
반응형'Python > 파이썬 기초' 카테고리의 다른 글
[time] 파이썬 코드의 실행시간 측정해보기 (0) 2023.08.25 [Python] 파이썬 랜덤 추첨 프로그램 만들어보기 (0) 2023.08.04 [datetime] 파이썬 datetime 패키지를 이용해 날짜 형식 변환 또는 추출하기 (0) 2023.05.23