파이썬팁

*args와 **kwargs는 파이썬에서 무엇일까?

팁뚠이 2022. 4. 1. 22:21
728x90

팁뚠이 입니다. 파이썬 팁 시작입니다. 파이썬은 쉬운 언어로 많은 분들이 하다 보니, 인터넷에서 접할 수 있는 정보도 많고 책과 강의를 통해서도 익힐 수 있는 내용이 많습니다. 다만 많은 내용들이 코드 나열이나, 복잡한 해석 등이 많아 이해가 어려운 경우가 많습니다. 쉽게 익힐 수 있는 파이썬 개념을 팁들로 다루려고 합니다. 물론 기본적인 토픽 등은 워낙 다른 블로그나 책, 강의에서도 쉽게 설명했으니, 하다 보면 익숙하지 않은 개념들 위주로 다루겠습니다.

 

정해지지 않은 개수의 인자를 입력 받을 수 있는 문법

 

쉽게 말해, 입력이 몇 개인지, 입력 변수명이 무엇인지 알려주지 않아도 된다는 얘기입니다. 

기본적으로 파이썬에서 함수를 사용 시, 정해진 개수의 입력을 합니다.

def test(apple, banana):
	print(apple)
    	print(banana)

이 경우 test 함수의 인자로 두 개의 입력 변수를 받았습니다. 근데 만약 입력 개수를 알 수 없을 때는 어떻게 할까요?

가령 입력이 튜플이나 딕셔너리 형태로 알 수 없는 길이로 오는 경우엔 어떻게 할까요?

 

test("apple", "banana", "cinnmon")
test("apple", "banana", "cinnmon", "drums")

 

이렇게 입력의 개수가 정해지지 않고, 매번 바뀔 경우도 있습니다. 이 경우엔 우리가 함수에서 미리 입력을 지정할 수 없게 됩니다. 이 경우를 해결하기 위해 사용하는 게, *args와 **kwargs입니다.

 

*args: arguments의 약자
튜플을 입력으로 받음

 

*args를 함수 안에 사용하면, 개수가 정해지지 않은 튜플을 받을 수 있습니다. 쉽게 예제를 보면, 아래와 같습니다.

 

def test(*args):
	print("args", args)
    
test("apple", "banana", "cinamon")

결과
args: ('apple', 'banana', 'cinamon')

 

*args로만 지정하면, 튜플로 들어오는 입력이 무엇인지는 모르겠지만, 통째로 args에 튜플 형태로 넣겠다는 의미입니다. 굉장히 편리하다 보니, 머신러닝에서나 aws 등에서도 많이 사용하는 문법입니다.

 

**kwargs: keyword arguments의 약자
딕셔너리를 입력으로 받음

 

이번엔 **kwargs입니다. 위의 *args와의 차이는 튜플이냐 딕셔너리냐의 차이입니다. 똑같이 입력 변수의 개수나 변수명 등 지정하지 않아도 받는 데로 kwargs에 지정하겠다는 의미입니다. 코드를 보겠습니다.

 

def test_kwargs(**kwargs):
	print("kwargs:", kwargs)
    
test_kwargs(num = 27, city = "seoul")

결과
kwargs: {'num': 27, 'city': 'seoul'}

 

함수에 딕셔너리 형태의 입력을 넣으면, 자동으로 kwargs에 딕셔너리가 입력으로 들어갑니다. args와 차이는 앞에 k가 붙어서 keyword가 추가됐습니다. keyword는 말 그대로 딕셔너리 형태에서 key: value 형태에서 key를 나타냅니다. 따라서 kwargs는 딕셔너리를 지칭하는 게 드러납니다.  

 

오늘은 *args와 **kwargs에 대해 알아봤습니다. 참고로 args와 kwargs에서 *, **만 사용해도 됩니다만 관용적으로 args와 kwargs를 쓰는 경향이 있습니다. *num, **numbers 이렇게 임의로 해도 무방합니다.  

728x90