
서론
FastAPI를 공부하면서 데코레이터에 대한 이해가 필수적이라는 것을 알게 되었다. 파이썬을 다루면서 종종 접했던 *args와 **kwargs도 이에 깊이 관련되어 있다. 그동안 이 부분을 대충 넘어가곤 했지만, 이번 기회에 확실히 정리해보려 한다.
처음 args와 **kwargs를 접했을 때, 나는 C언어의 포인터와 이중 포인터를 떠올렸다. C언어를 처음 배울 때 포인터는 어느 정도 이해했지만, 이중 포인터는 다소 복잡하게 느껴졌던 기억이 난다. 이러한 이유로 args와 **kwargs에 대해서도 자세히 알아보는 것을 피했던 것 같다.
이번 포스팅에서는 *args와 **kwargs의 개념과 사용법을 명확히 정리하여, 앞으로의 개발에 있어 도움이 됐음 좋겠다.
*args와 **kwargs의 개념
*args - arguments
args는 가변 인자를 함수에 전달할 때 사용된다. 이는 함수가 몇 개의 인자를 받을지 모를 때 유용하다. *args는 튜플 형태로 전달되며, 함수 내부에서는 일반적인 튜플처럼 다룰 수 있다.
예제를 통해 살펴보자
def 예제_함수(*args):
for arg in args:
print(arg)
예제_함수(1, 2, 3, "안녕하세요", [4, 5, 6])
위의 코드는 함수 호출 시 여러 개의 인자를 전달하고, 함수 내부에서는 이 인자들을 반복문을 통해 하나씩 출력한다. ****
*args를 사용하면 함수 호출 시 전달되는 인자의 개수에 구애받지 않고 처리가 가능하다.
**kwargs - keyword arguments
kwargs는 키워드 가변 인자를 함수에 전달할 때 사용된다. 이는 함수가 몇 개의 키워드 인자를 받을지 모를 때 유용하다. kwargs는 딕셔너리 형태로 전달되며, 함수 내부에서는 일반적인 딕셔너리처럼 다룰 수 있습니다.
예제를 통해 살펴보자
def 예제_함수(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
예제_함수(이름="홍길동", 나이=30, 직업="개발자")
위의 코드는 함수 호출 시 여러 개의 키워드 인자를 전달하고, 함수 내부에서는 이 인자들을 반복문을 통해 키와 값을 출력한다.
**kwargs를 사용하면 함수 호출 시 전달되는 키워드 인자의 개수와 이름에 구애받지 않고 처리가 가능하다.
*args와 **kwargs의 활용
함수의 유연성 증가
*args와 **kwargs를 활용하면 함수의 유연성이 대폭 증가한다.
예를 들어, 다양한 인자를 받아야 하는 로그 함수나 데이터 처리 함수에서 유용하게 사용할 수 있다.
def 유연한_로그_함수(*args, **kwargs):
for arg in args:
print(f"로그: {arg}")
for key, value in kwargs.items():
print(f"{key}: {value}")
유연한_로그_함수("에러 발생", "디버그 모드", 에러코드=404, 메세지="페이지를 찾을 수 없습니다")
위의 예제는 가변 인자와 키워드 가변 인자를 모두 받아 처리하는 함수다.
이를 통해 함수 호출 시 다양한 형태의 인자와 키워드 인자를 자유롭게 전달할 수 있게 된다.
데코레이터와의 연계
FastAPI와 같은 프레임워크에서 데코레이터를 사용할 때도 *args와 **kwargs가 유용하게 사용된다.
데코레이터는 함수를 감싸는 함수로, 주로 함수의 전후 처리 로직을 추가할 때 사용된다. *args와 **kwargs를 사용하면 데코레이터가 감싸는 함수의 인자를 유연하게 전달할 수 있다.
def 데코레이터_함수(func):
def wrapper(*args, **kwargs):
print("함수 호출 전 처리")
result = func(*args, **kwargs)
print("함수 호출 후 처리")
return result
return wrapper
@데코레이터_함수
def 예제_함수(인사말, 이름):
print(f"{인사말}, {이름}님!")
예제_함수("안녕하세요", "홍길동")
위의 예제에서 데코레이터 함수는 *args와 **kwargs를 사용하여 감싸는 함수의 인자를 유연하게 처리하고 있다. 이를 통해 데코레이터를 사용하는 함수는 인자의 형태나 개수에 구애받지 않고 동작할 수 있게 된다.
결론
*args와 **kwargs는 파이썬 함수의 유연성을 높여주는 강력한 도구다. 이를 잘 활용하면 다양한 인자와 키워드 인자를 처리하는 함수를 효율적으로 작성할 수 있고, 특히 데코레이터와 함께 사용할 때 그 진가가 발휘된다.
꼭 args가 아닌 yeachan 이런 식으로 사용해도 무방하다.
'Python' 카테고리의 다른 글
Section 1_Context Manager(2) (0) | 2024.01.06 |
---|---|
Section 1_Context Manager(1) (1) | 2024.01.06 |
Section 1_Shallow Copy & Deep Copy (1) | 2024.01.06 |
Section 1_Lambda, Reduce, Map, Filter Functions (1) | 2024.01.05 |