기본 매개변수를 사용하는 변수 매개변수
Python은 변수 매개변수를 지원합니다. 예를 들어,
def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two test_defargs(1) # result: # Required argument: 1 # Optional argument: 2 test_defargs(1, 3) # result: # Required argument: 1 # Optional argument: 3
*args 및 ** 함수를 정의할 때 사용합니다. kwargs
물론 이 글에서는 *args 및 **kwargs 구문을 사용하여 가변 매개변수(Variable Argument)를 얻는 방법에 대해 주로 설명합니다. 그 중 *args는 가변 위치 인자 목록이고, **kwargs는 가변 키워드 인자 목록이다. 또한 위치 인수가 키워드 인수 앞에 와야 하므로 *args는 **kwargs 앞에 와야 합니다.
먼저 두 가지의 기본적인 사용법을 소개합니다.
다음 예에서는 *args를 사용하고 필수 매개변수를 포함합니다.
def test_args(first, *args): print 'Required argument: ', first for v in args: print 'Optional argument: ', v test_args(1, 2, 3, 4) # result: # Required argument: 1 # Optional argument: 2 # Optional argument: 3 # Optional argument: 4
다음 예에서는 *kwargs를 사용하고 필수 매개변수와 *args 목록을 포함합니다.
def test_kwargs(first, *args, **kwargs): print 'Required argument: ', first for v in args: print 'Optional argument (*args): ', v for k, v in kwargs.items(): print 'Optional argument %s (*kwargs): %s' % (k, v) test_kwargs(1, 2, 3, 4, k1=5, k2=6) # results: # Required argument: 1 # Optional argument (*args): 2 # Optional argument (*args): 3 # Optional argument (*args): 4 # Optional argument k2 (*kwargs): 6 # Optional argument k1 (*kwargs): 5
함수 호출 시 *args 및 **kwargs를 사용하세요
*args 및 **kwargs 구문은 함수 정의뿐만 아니라 함수 호출 시에도 사용할 수 있습니다. 차이점은 함수가 정의된 위치에서 *args와 **kwargs를 사용하는 것이 매개변수를 패킹하는 과정이라면, 함수가 호출될 때 매개변수를 언패킹하는 과정이라는 점입니다. 이해를 돕기 위해 예를 들어보겠습니다.
def test_args(first, second, third, fourth, fifth): print 'First argument: ', first print 'Second argument: ', second print 'Third argument: ', third print 'Fourth argument: ', fourth print 'Fifth argument: ', fifth # Use *args args = [1, 2, 3, 4, 5] test_args(*args) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5 # Use **kwargs kwargs = { 'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5 } test_args(**kwargs) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5
*args 및 **kwargs를 사용하면 함수를 정의하는 데 매우 편리할 수 있으며 향후 코드 유지 관리를 위한 확장성을 높일 수도 있습니다.
예
def foo(*args, **kwargs): print('args = ', args) print('kwargs = ', kwargs) print('---------------------------------------') if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1, None, a=1, b='2', c=3)
참고
참고: 이러한 종류의 함수를 정의하거나 호출할 때는 다음 규칙을 따라야 합니다.
변수 매개변수는 불변 매개변수 이후
*args는 가변 위치 인수 목록이고, **kwargs는 가변 키워드 인수 목록입니다. 그리고 *args는 **kwargs 앞에 와야 합니다. 위치 인수가 키워드 인수 앞에 와야 하기 때문입니다.