Let's Programming/Python

함수 인자값으로 사용하는 *args, **kwargs와 Hint 정리

아르센 루팽 2022. 6. 17. 10:22

1. *args와 **kwargs

파이썬에서 함수 인자값으로 *args, **kwargs를 사용하는 경우가 있습니다. 이 인자값에 대해 정리해보고자 합니다. 그리고 추가로 함수나 클래스를 정의할 때, 인자값의 type를 적는 hint 지정에 대해서도 함께 정리해보고자 합니다.

*args, **kwargs는 각각 argument, key word argument로, 함수 인자값을 positional로 받거나 인자값을 유연하게 받기 위해 사용합니다. 좀더 알기 위해 예제 코드를 작성하고 그 결과값을 살펴보겠습니다.

def test_func(x, y, z=None, *args, **kwargs):
    print('1st args is x:', x)
    print('2nd args is y:', y)
    print('3nd args is y:', z)

    print('args:', args)
    print('kwargs:', kwargs)    


test_func('1', '2', '3', '4', '5', bar='!')

위 예제 코드를 실행시키면, 다음과 같은 결과를 얻을 수 있습니다.

1st args is x: 1
2nd args is y: 2
3nd args is y: 3
args: ('4', '5')
kwargs: {'bar': '!'}

 

위 결과값을 볼 때, *args, **kwargs에 대해 다음과 같이 정리해볼 수 있겠습니다.

  • *args를 받아서, args로 호출하면, Tuple형태로 각 인자 값을 사용할 수 있다.
  • **kwargs로 받아서 kwargs로 호출하여 Dict형태로 인자 값을 관리할 수 있다.
  • 다만, z=None 처럼 optional argument 뒤에 *args를 넣으면, z가 자동으로 채워진다. 물론, z를 가장 뒤에 배치하면 에러가 발생한다

 

2. Hint

함수를 정의할 때, 각 parameter의 타입과 함수에서 return해주는 타입을 적어놓고 싶을 때가 있다. 이를 위해 hint를 지정할 수 있도록하는 기능이 추가되었다. hint type은 typing 모듈이 3.5 이후부터 표준 라이브러리로 추가됨에 따라 가능해졌다.

함수 foo가 있고, 인자 값으로 int형태의 param을 가지며, Boolean을 리턴한다고 하자. Class도 hint에 넣을 수 있다.

# 유형 1
def foo(param: int) -> bool:
    return param % 2 == 0

# 유형 2
class Person:
    pass

def function_name(param_1: int, param_2: "Person") -> bool:
    return param_2.age % param_1 == 0

 

 

반응형

'Let's Programming > Python' 카테고리의 다른 글

Class와 관련된 용어 정리  (0) 2022.06.16