Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 *args와 **kwargs 사용법 완벽 정리

Python에서 함수를 정의할 때 인수의 개수가 정해지지 않은 경우가 종종 있습니다. 이럴 때 유용하게 사용되는 것이 바로 *args**kwargs입니다. 이 두 매개변수를 활용하면 함수가 임의의 개수의 인수를 받아들일 수 있어 코드의 유연성이 크게 향상됩니다.

*args란 무엇인가?

단일 별표(*) 형태의 *args는 함수에 키워드가 없는(non-keyworded) 가변 길이 인수 목록을 전달할 때 사용됩니다. 여기서 중요한 것은 별표(*) 기호이며, 관례적으로 붙이는 'args'라는 이름과 함께 '키워드가 없는 가변 길이 인수 목록'이라는 의미를 나타냅니다.

*args 사용 예제

다음은 *args를 활용해 전달받은 모든 숫자를 곱하는 함수의 예제입니다.

def multiply(*args):
    y = 1
    for i in args:
        y = y * i
    print(y)

multiply(3, 4)
multiply(10, 8)
multiply(2, 5, 6)
multiply(4, 5, 10, 9)

실행 결과

12
80
60
1800

위 예제에서 볼 수 있듯이, multiply 함수는 호출 시 인수를 몇 개든 자유롭게 받을 수 있습니다. 전달된 인수들은 함수 내부에서 튜플(tuple) 형태로 묶여 처리됩니다.

**kwargs란 무엇인가?

이중 별표(**) 형태의 **kwargs는 함수에 키워드가 있는(keyworded) 가변 길이 인수 딕셔너리를 전달할 때 사용됩니다. 마찬가지로 두 개의 별표(**)가 핵심이며, 'kwargs'라는 이름과 함께 '키워드가 있는 가변 길이 인수 딕셔너리'라는 의미를 나타냅니다.

**kwargs 사용 예제

다음은 **kwargs를 활용해 키워드 인수를 그대로 출력하는 함수의 예제입니다.

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a='foo', b=10, c=True)

실행 결과

{'a': 'foo', 'b': 10, 'c': True}

위 예제에서처럼 **kwargs를 사용하면 키워드 인수들이 함수 내부에서 딕셔너리(dictionary) 형태로 저장됩니다. 각 키워드는 딕셔너리의 키(key)가 되고, 해당 값(value)과 함께 저장됩니다.

*args와 **kwargs의 핵심 차이점

  • *args: 위치 인수들을 튜플 형태로 받습니다.
  • **kwargs: 키워드 인수들을 딕셔너리 형태로 받습니다.
  • 두 매개변수를 함께 사용할 경우, 함수 정의에서 반드시 *args**kwargs보다 앞에 위치해야 합니다.

이처럼 *args와 **kwargs를 잘 활용하면 다양한 상황에 대응할 수 있는 유연하고 재사용성 높은 함수를 작성할 수 있습니다.