TIL47. *args ? **kwargs ?

Jaeyeon·2021년 3월 18일
0
post-thumbnail

python에서 variable arguments는 두 종류가 있습니다.
1. Keyworded variable length of arguments
2. Non-keyworded variable length of arguments


1. 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'}

2. Non-keyworded variable length of arguments

Non-keyworded variable length of arguments 혹은 그냥 variable length of arguments 라고 합니다. 더 간단하게 variable arguments 라고 하기도 합니다.

parameter 이름앞에 한개의 별표 (*) 로 시작해야 합니다.

*parameters

가장 중요한 점은
Non-keyworded variable length of arguments는 tuple 형태로 지정된다는 것입니다.

3. Mixing args and kwargs

Variable argumentskeyworded 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()

profile
생각하는 개발자 되기

0개의 댓글