728x90
Python 함수를 보다 보면 아래와 같은 문법이 자주 보입니다.
def my_function(*args, **kwargs):
많은 Python 라이브러리나 프레임워크에서 흔하게 등장하며, 가변 인자를 처리할 때 사용하는 매우 유용한 기능입니다.
해당 글에서는 *args
와 **kwargs
의 의미, 사용 방법, 예제에 대해 설명드리겠습니다.
*args: 위치 인자를 여러 개 받을 때
*args
는 임의 개수의 위치 인자(positional arguments)를 튜플 형태로 받아주는 기능입니다.
예시: 숫자들을 더하는 함수
def add_all(*args):
return sum(args)
print(add_all(1, 2, 3)) # 출력: 6
print(add_all(10, 20, 30, 40)) # 출력: 100
여기서 args
는 다음과 같은 튜플로 동작합니다:
(1, 2, 3)
(10, 20, 30, 40)
즉, 함수 정의 시 *args
는 입력 개수를 정하지 않아도 되도록 만드는 방법입니다.
예시: 각 인자 출력
def show_args(*args):
for i, val in enumerate(args):
print(f"args[{i}] = {val}")
show_args("apple", "banana", "cherry")
# 출력
# args[0] = apple
# args[1] = banana
# args[2] = cherry
**kwargs: 키워드 인자를 여러 개 받을 때
**kwargs
는 임의 개수의 키워드 인자(keyword arguments)를 딕셔너리 형태로 받아줍니다.
예시: 사용자 정보 출력
def print_user_info(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
print_user_info(name="Alice", age=30, city="Seoul")
출력 결과:
name = Alice
age = 30
city = Seoul
kwargs
는 내부적으로 다음과 같은 딕셔너리가 됩니다:
{'name': 'Alice', 'age': 30, 'city': 'Seoul'}
*args와 **kwargs를 함께 쓰는 경우
두 개를 함께 사용할 수도 있으며, 항상 *args
가 먼저, **kwargs
가 나중에 와야 합니다.
def demo(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
demo(1, 2, 3, a=10, b=20)
출력 결과:
args: (1, 2, 3)
kwargs: {'a': 10, 'b': 20}
함수 호출 시 *와 **를 사용하는 경우
함수 호출 시에도 *
와 **
를 사용하면 리스트나 딕셔너리를 각각 args
나 kwargs
형태로 전달할 수 있습니다.
def greet(name, age):
print(f"{name}님은 {age}살입니다.")
args = ["홍길동", 25]
greet(*args) # 홍길동님은 25살입니다.
kwargs = {"name": "철수", "age": 32}
greet(**kwargs) # 철수님은 32살입니다.
감사합니다!
728x90
'프로그래밍 > Python' 카테고리의 다른 글
Python lambda 함수란 (3) | 2025.07.16 |
---|---|
Python 함수 위 @ - 데코레이터 란 (8) | 2025.07.15 |
Python expand() 및 repeat() (16) | 2025.07.12 |
Python squeeze 및 unsqueeze 함수 - view와의 차이 (4) | 2025.07.12 |
Python reshape 함수 - view, flatten과의 차이 (20) | 2025.07.11 |