python에서 variable arguments는 두 종류가 있습니다.
1. Keyworded variable length of arguments
2. Non-keyworded variable length of arguments
Keyworded arguments를 0~N개로 유동적으로 받을 수 있는 것을 뜻합니다.
parameter 이름앞에 두개의 별표 (**) 로 시작해야 합니다.
**parameters
가장 중요한 점은
Keyworded variable length of arguments는 dictionary 형태로 지정된다는 것입니다.
Keyworded variable length of arguments를 이용한 함수로 예를 들겠습니다.
def buy_A_car(**kwargs): print(f"다음 사양의 자동차를 구입하십니다:") for i in kwargs: print(f"{i} : {kwargs[i]}")
이를 호출할때, 다음과 같이 호출 할 수 있습니다.
buy_A_car(seat="가죽", blackbox="최신", tint="yes")
그러면 kwargs 파라미터는 다음과 같은 dictionary로 함수에 전해지게 됩니다.
{'seat': '가죽', 'blackbox': '최신', 'tint': 'yes'}
Non-keyworded variable length of arguments 혹은 그냥 variable length of arguments 라고 합니다. 더 간단하게 variable arguments 라고 하기도 합니다.
parameter 이름앞에 한개의 별표 (*) 로 시작해야 합니다.
*parameters
가장 중요한 점은
Non-keyworded variable length of arguments는 tuple 형태로 지정된다는 것입니다.
Variable arguments와 keyworded variable arguments 둘다 사용하여 함수를 정의할 수 도 있습니다.
def myFun(*args, **kwargs):
print("args: ", args)
print("kwargs: ", kwargs)
print(myFun('geeks', 'for', 'geeks', first="Geeks", mid="for", last="Geeks"))
결과값:
args: ('geeks', 'for', 'geeks')
kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}
왜 둘다 사용할까요?
둘다 사용하면 어떠한 형태와 수의 argument도 허용 가능한 함수가 됩니다.
즉, 모든 인자를 허용하는 함수이고 parameter에 있어서 굉장히 유동적인 함수가 되는 것입니다.
do_something(1, 2, 3, name="정우성", age=45)
do_something(1, 2, 3, 4, 5, "hello", {"주소" : "서울", "국가" : "한국"})
do_something(name="정우성", gender="남", height="187")
do_something(1)
do_something()