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

파이썬 *args와 **kwargs 완벽 가이드 – 가변 인자의 모든 것

파이썬에서 함수를 정의하는 목적은 함수의 인자에 서로 다른 값을 전달하면서 코드를 반복적으로 실행하기 위함입니다. 그런데 이런 설계에는 한 가지 고민이 따릅니다. 바로 "함수를 호출할 때마다 처리해야 할 인자의 개수가 달라진다면 어떻게 해야 할까?"라는 문제입니다. 이때 필요한 것이 바로 *args**kwargs라는 특별한 인자입니다. 지금부터 하나씩 자세히 살펴보겠습니다.

*args – 가변 개수의 위치 인자

*args를 사용하면 함수에 임의 개수의 위치 인자(positional argument)를 전달할 수 있습니다. 아래 예제는 여러 숫자를 곱한 결과를 구하는 코드입니다. 함수를 호출할 때마다 숫자의 개수가 달라져도 하나의 함수로 유연하게 처리할 수 있습니다.

예제

def findproduct(*many_nums):
    result = 1
    for num in many_nums:
        result = result * num
    print("Multiplication result:", result)

findproduct(3, 9)
findproduct(2, 11, 10)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Multiplication result: 27
Multiplication result: 220

**kwargs – 가변 개수의 키워드 인자

다음으로, 키-값(key-value) 쌍 형태의 키워드 인자(keyword argument)를 함수에 전달해야 하는 경우를 생각해 볼 수 있습니다. 이때도 마찬가지로 키워드 인자의 개수를 자유롭게 조절할 수 있는데, 이렇게 선언되는 인자를 **kwargs라고 부릅니다. 주의할 점은 일반 *args와 달리 별표(asterisk) 두 개를 붙인다는 것입니다. 실제로 **kwargs로 전달된 값들은 여러 개의 키-값 쌍을 담고 있는 파이썬 딕셔너리(dictionary) 형태로 함수 내부에 전달됩니다.

예제

def country_details(**state_info):
    print('\n\n')
    for k, v in state_info.items():
        print("{} is {}".format(k, v))

country_details(StateName="Telangana", Capital="Hyderabad", Population=3400000)
country_details(StateName="Andhra Pradesh", Capital="Amaravati", Population=1000000, ForestCoverage="30%")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

StateName is Telangana
Capital is Hyderabad
Population is 3400000


StateName is Andhra Pradesh
Capital is Amaravati
Population is 1000000
ForestCoverage is 30%

정리

*args는 개수가 정해지지 않은 위치 인자를 튜플(tuple) 형태로 받아들이고, **kwargs는 개수가 정해지지 않은 키워드 인자를 딕셔너리 형태로 받아들입니다. 두 기능을 적절히 활용하면 호출 상황에 따라 유연하게 인자를 전달할 수 있는 범용적인 함수를 작성할 수 있으며, 라이브러리나 프레임워크 개발에서도 폭넓게 사용되는 필수 개념입니다.