Python

[파이썬-중급] *args와 **kwargs

eunyeong 2021. 10. 31. 12:54

1. *args와 **kwargs

대부분의 경우 *args와 *kwargs는 함수를 정의할 때 사용됩니다. 

사용자가 몇 개의 인자를 함수에 넣을지 모를 때 (즉, 가변 갯수의 인자를 사용할 때) *args와 **kwargs를 사용할 수 있습니다.

 

 

(1) *args의 사용법

def test_var_args(f_arg, *args):
    print("첫 번째 인자: ", f_arg)
    for arg in args:
        print("*args의 다른 인자:", arg)

test_var_args("은영이가 좋아하는 것은 ", "떡볶이", "치킨", "빵" )
첫 번째 인자:  은영이가 좋아하는 것은 
*args의 다른 인자: 떡볶이
*args의 다른 인자: 치킨
*args의 다른 인자: 빵

코드를 보면 첫번째 인자는 f_arg가 받아 출력하고 나머지 인자들은 *args로 받아 for문을 돌면서 출력하게 됩니다.

이렇게 사용자가 몇 개의 인자를 넘겨주는지 모를 때 *args를 쓸 수 있습니다. 

 

 

(2) **kwargs의 사용법

**args와 **kwargs의 가장 큰 차이점은 **kwargs는 딕셔너리 형태의 인자를  받는다는 것입니다.

def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.items():
            print ("%s : %s" % (key, value))

greet_me(name="은영", age=24, favorite="떡볶이")
name : 은영
age : 24
favorite : 떡볶이

코드를 보면 **kwargs로 딕셔너리 형태의 인자를 받아서 for문을 돌게 됩니다.

이 때 items()함수를 써서 딕셔너리의 key, value 쌍을 얻어 각각 key, value에 넣어주고 프린트 해주게 됩니다.

 

 

(3) 함수를 호출하기 위한 *args와 **kwargs

함수를 호출할 때 *args와 **kwargs를 사용할 수 있습니다.

아래와 같은 간단한 함수가 있습니다.

def test_args_kwargs(arg1, arg2, arg3):
    print("인자1:", arg1)
    print("인자2:", arg2)
    print("인자3:", arg3)

이 함수에게 인자를 전달하기 위해 *args와 **kwargs를 사용할 수 있습니다.

# *args를 사용할 때
args = ("two", 3, 5)
test_args_kwargs(*args)
인자1: two
인자2: 3
인자3: 5
# **kwargs를 사용할 때
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5} # 키는 위 함수의 매개변수의 이름과 같아야합니다.
test_args_kwargs(**kwargs)
인자1: 5
인자2: two
인자3: 3

 

 

함수 파라미터 순서

test_args_kwargs(fargs, *args, **kwargs) 순서를 지켜주어야 합니다. 

지키지 않을 경우 에러가 납니다.

def test_args_kwargs(name, *args, **kwargs):
    print("%s의 저녁 메뉴를 골라보자" %name)

    print("메뉴 목록")
    for arg in args:
        print(arg)

    print("메뉴 가격")
    for key, value in kwargs.items():
        print("%s : %s" % (key, value))

args = ("떡볶이", "치킨", "피자")
kwargs = {"떡볶이": 14000, "치킨": "16000", "피자": 18000}
test_args_kwargs("정은영", *args, **kwargs)
정은영의 저녁 메뉴를 골라보자
메뉴 목록
떡볶이
치킨
피자
메뉴 가격
떡볶이 : 14000
치킨 : 16000
피자 : 18000

 

 

 

 

REFERENCE

다음 책을 참고하여 공부한 내용을 작성하였습니다.

https://github.com/DDanggle/interpy-kr

 

GitHub - DDanggle/interpy-kr: 중급 파이썬 https://ddanggle.gitbooks.io/interpy-kr/content/

중급 파이썬 https://ddanggle.gitbooks.io/interpy-kr/content/ - GitHub - DDanggle/interpy-kr: 중급 파이썬 https://ddanggle.gitbooks.io/interpy-kr/content/

github.com