본문 바로가기
프로그래밍/Python

Python *args, **kwargs 의미

by 허구의 2025. 7. 14.
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}

함수 호출 시 *와 **를 사용하는 경우

함수 호출 시에도 ***를 사용하면 리스트나 딕셔너리를 각각 argskwargs 형태로 전달할 수 있습니다.

def greet(name, age):
    print(f"{name}님은 {age}살입니다.")

args = ["홍길동", 25]
greet(*args)  # 홍길동님은 25살입니다.

kwargs = {"name": "철수", "age": 32}
greet(**kwargs)  # 철수님은 32살입니다.

 

감사합니다!

728x90