파이썬에서 함수를 더욱 유연하게 만들어주는 강력한 기능인 *args와 **kwargs에 대해 알아보겠습니다.
이 두 가지 문법을 이해하고 활용하면, 여러분의 코드는 한층 더 동적이고 확장 가능해질 것입니다.
*args: 위치 인자의 자유로운 확장
*args는 함수가 임의의 수의 위치 인자를 받을 수 있게 해줍니다. 함수 내부에서 args는 튜플로 처리됩니다.
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 출력: 6
print(sum_all(1, 2, 3, 4, 5)) # 출력: 15
이 예제에서 sum_all 함수는 몇 개의 인자가 전달되든 상관없이 모든 인자를 더해줍니다.
**kwargs: 키워드 인자의 무한한 가능성
**kwargs는 함수가 임의의 수의 키워드 인자를 받을 수 있게 해줍니다. 함수 내부에서 kwargs는 딕셔너리로 처리됩니다.
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="New York")
# 출력:
# name: Alice
# age: 30
# city: New York
이 함수는 어떤 키워드 인자라도 받아 그 정보를 출력할 수 있습니다.
*args와 **kwargs의 결합: 궁극의 유연성
두 가지를 함께 사용하면, 위치 인자와 키워드 인자를 모두 자유롭게 다룰 수 있습니다.
def ultimate_function(*args, **kwargs):
print("위치 인자:", args)
print("키워드 인자:", kwargs)
ultimate_function(1, 2, 3, name="Alice", age=30)
# 출력:
# 위치 인자: (1, 2, 3)
# 키워드 인자: {'name': 'Alice', 'age': 30}
실전 활용: 함수 호출 시 시퀀스와 딕셔너리 언패킹
*와 **를 사용하여 시퀀스나 딕셔너리를 함수 인자로 풀어서 전달할 수도 있습니다.
def greet(name, age):
print(f"안녕하세요, {name}님. 당신은 {age}세입니다.")
info = ["철수", 25]
greet(*info) # 출력: 안녕하세요, 철수님. 당신은 25세입니다.
info_dict = {"name": "영희", "age": 30}
greet(**info_dict) # 출력: 안녕하세요, 영희님. 당신은 30세입니다.
마치며
*args와 **kwargs는 파이썬 함수를 더욱 강력하고 유연하게 만들어주는 도구입니다. 이를 활용하면 함수의 재사용성을 높이고, 더 범용적인 코드를 작성할 수 있습니다. 특히 데코레이터나 래퍼 함수를 만들 때 이 기능들은 필수적입니다.
여러분의 코드에서 이 기능들을 적절히 활용해보세요. 더 우아하고 확장 가능한 코드를 작성하는 데 큰 도움이 될 것입니다!
다음에는 더 심화된 파이썬 기법들에 대해 다뤄보도록 하겠습니다. 파이썬과 함께하는 즐거운 코딩 되세요!