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 |
---|