[파이썬-중급] *args와 **kwargs
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