블로그로 돌아가기

코드에서 *args 및 **kwargs 매개변수 사용하기: Python 3 튜토리얼

코드에서 *args 및 **kwargs 매개변수 사용하기: Python 3 튜토리얼

소개

Python은 전 세계에서 가장 인기 있는 프로그래밍 언어 중 하나입니다. Python에서 매개변수(parameter)는 함수 정의의 일부입니다. 이를 통해 함수의 특정 인자(argument)를 지정할 수 있습니다. 인자는 함수에 의해 전달되고 적용될 수 있습니다.

하지만 코딩하는 시점에는 여러분의 코드로 어떤 정확한 사용 사례가 구현될지 알 수 없습니다. 따라서 미래의 프로그래머와 프로그램 사용자를 위해 함수에 가변적인 개수의 인자를 전달하는 것이 좋습니다. 이를 위해 특별한 매개변수를 사용해야 합니다. 바로 *args**kwargs입니다. 이 튜토리얼에서는 Python의 *args**kwargs 매개변수에 대해 모두 알아볼 것입니다. 또한 인자의 순서를 정하는 방법과 이를 함수 호출에 적용하는 방법도 배울 것입니다.

사전 요구 사항

이 튜토리얼의 단계를 따라 하려면 몇 가지 사전 요구 사항을 준비해야 합니다. 먼저, 서버에 프로그래밍 환경이 설정되고 Python 3가 설치되어 있어야 합니다. 또한 특정 운영 체제용 프로그램이 설치되어 있어야 합니다 (Ubuntu, CentOS, Debian 등).

*args란 무엇이며 어떻게 작동하나요?

먼저 *args가 어떻게 작동하는지 이해하는 것부터 시작해 보겠습니다. 별표(asterisk)가 하나 있는 이 매개변수는 키워드가 없는 가변 길이 인자 목록을 함수로 전달하는 데 사용됩니다. 별표가 해당 매개변수에서 가장 중요한 요소라는 점을 기억하세요.

더 잘 이해하기 위해 예를 들어 보겠습니다. 다음은 두 개의 인자를 사용하는, 코드에서 흔히 볼 수 있는 일반적인 함수입니다.

보시다시피 위 함수의 인자는 xy입니다. 함수를 호출할 때 xy에 해당하는 숫자를 사용하게 됩니다. 예를 들어 정수 54를 각각 xy에 전달한다고 가정해 보겠습니다:

이제 코드를 실행할 수 있습니다:

출력 결과는 다음과 같습니다:

출력 결과는 정수 5와 4가 곱해졌음을 보여줍니다. 이는 multiply(x, y) 함수가 잘 작동했음을 의미합니다.

이제 두 개가 아닌 세 개의 숫자를 곱하고 싶다고 가정해 보겠습니다. 아쉽게도 위의 함수에 숫자를 하나 더 추가하면 다음과 같은 오류가 발생합니다:

따라서 나중에 더 많은 인자를 추가해야 할 수도 있다는 생각이 든다면, 편의를 위해 *args 매개변수를 적용해 보세요. 다음과 같이 사용할 수 있습니다:

우리는 단순히 xy 함수 매개변수를 *args로 대체했습니다. 이 코드를 실행하면 다음과 같이 모든 단일 함수 호출에 대한 곱을 얻을 수 있습니다:

따라서 *args는 함수에 가변 길이 인자 목록을 전달하고자 할 때 사용하기에 이상적입니다. 이 기능 덕분에 함수 호출 시 원하는 만큼 많은 인자를 전달할 수 있습니다. 이처럼 이 매개변수를 사용하면 키워드가 없는 다양한 가변 인자를 함수로 받아들일 수 있는 더 유연한 코드를 작성할 수 있습니다.

**kwargs란 무엇이며 어떻게 작동하나요?

다음으로, 별표가 두 개 있는 버전의 매개변수인 **kwargs가 있습니다. 이전 형태와 달리, 이 매개변수를 사용하면 키워드가 있는 가변 길이 인자 딕셔너리를 함수에 전달할 수 있습니다. *args와 유사하게, 이중 별표는 매개변수에서 가장 중요한 요소입니다.

이전 섹션에서 했던 것처럼 원하는 만큼 인수를 추가할 수 있습니다. 차이점은 키워드를 지정해야 한다는 것입니다. 더 잘 이해하기 위해 다음 예를 살펴보겠습니다. 여기서는 먼저 함수에 전달하려는 **kwargs 인수를 출력하는 것부터 시작하겠습니다:

이제 함수를 호출해 보겠습니다. 보시다시피 키워드 인수를 추가했습니다:

이 시점에서 프로그램을 실행하면 다음과 같은 출력이 표시됩니다:

하지만 딕셔너리 데이터 타입의 순서가 보장되지 않을 가능성이 있습니다. 이는 주로 사용하는 Python 3 버전에 따라 다릅니다. 예를 들어, Python 3.6 이후 버전은 키-값 쌍을 순서대로 제공합니다. 그 이전 버전은 출력을 무작위 순서로 표시합니다. 생성하는 딕셔너리는 kwargs(이)라고 불립니다. 시스템의 다른 딕셔너리와 마찬가지로 이를 사용하고 조작할 수 있습니다. 이제 **kwargs 매개변수를 더 유용하게 활용하고 적용하는 방법을 살펴보겠습니다.

다음 예제에서는 이름이 포함된 딕셔너리를 맞이하는 새 함수를 만들어 보겠습니다. 샘플 딕셔너리에는 두 개의 이름이 있습니다:

프로그램을 실행하면 다음과 같은 출력이 표시됩니다:

이전 예제와 마찬가지로 딕셔너리는 순서가 지정되지 않은 것처럼 보일 수 있습니다. 따라서 일부 경우에는 Casey와 Sammy라는 이름의 순서가 뒤바뀔 수 있습니다.

다음으로 함수에 추가 인수를 전달하겠습니다. 이를 통해 **kwargs 가 원하는 수의 인수를 수락하도록 만들 수 있음을 증명할 것입니다:

프로그램을 실행하면 다음과 같은 출력이 표시됩니다:

이 출력 역시 순서가 보장되지 않을 수 있습니다. 그럼에도 불구하고, 이 예제들은 **kwargs 가 프로그램에 여러 키워드 인수를 사용할 수 있는 유연성을 제공한다는 것을 보여줍니다.

인수 순서를 정하는 방법

함수 또는 함수 호출에서 인수의 순서를 정할 때는 정해진 순서를 염두에 두는 것이 중요합니다. 순서는 다음과 같습니다:

  1. 형식 위치 인수

  2. *args

  3. 키워드 인수

  4. **kwargs

만약 *args**kwargs 을 명시적 위치 매개변수와 함께 사용한다고 가정해 보겠습니다. 이는 함수가 다음과 같은 형태가 됨을 의미합니다:

반면에, 이러한 매개변수를 키워드 매개변수라는 이름과 함께 사용하면 함수의 일반적인 구조는 다음과 같습니다:

설정된 순서를 따르지 않으면 코드를 실행할 때 구문 오류(syntax error)가 발생합니다. 따라서 처음부터 이러한 실수를 피하는 것이 가장 좋습니다.

함수 호출에서 *args 및 **kwargs를 사용하는 방법

마지막으로, 두 매개변수를 모두 사용하여 함수에 인수를 전달하는 방법을 보여드리겠습니다. 먼저 다음을 보여주는 예시로 시작해 보겠습니다. *args:

이 함수에는 세 개의 매개변수가 있습니다: arg_1, arg_2, 그리고 arg_3. 변수를 생성하고 이를 반복 가능한 객체(iterable)로 설정해야 합니다. 이 경우에는 tuple이 됩니다. 그런 다음 별표(asterisk) 구문을 사용하여 변수를 함수에 전달할 수 있습니다.

다음 명령을 사용하여 프로그램을 실행할 때의 출력을 확인해 보세요. python some_args.py 명령어:

프로그램을 반복 가능한 리스트 데이터 타입으로 변경하고 다른 변수 이름을 사용할 수도 있습니다. 다음 코드는 *args 을 이름이 있는 매개변수와 결합합니다:

프로그램을 실행하면 출력은 다음과 같습니다:

반면에, 키워드 인수를 **kwargs와 함께 적용할 수 있습니다. 딕셔너리와 동일한 변수를 생성해야 합니다. 이 딕셔너리는 2개의 키-값 쌍을 가져야 합니다. 다음은 3개의 인수를 가진 함수에 변수를 전달하는 방법입니다:

다시 한번 python some_kwargs.py 명령어를 사용하여 프로그램을 실행합니다:

결론

이 튜토리얼을 마칠 때쯤이면 여러분은 *args**kwargs가 무엇이고 어떻게 작동하는지 잘 이해하게 될 것입니다. 이제 이러한 매개변수를 자체 코드에 적용하여 향후 사용자를 위해 프로그램을 유연하게 만들 수 있습니다. 이는 얼마나 많은 인수가 사용될지 알 수 없는 상황에 이상적입니다. 다만 함수의 중요한 요소와 매개변수에 주의를 기울이시기 바랍니다.

마지막으로, 저희 블로그에서 제공하는, Python을 성공적으로 사용하는 데 도움이 될 더 많은 리소스들입니다:

즐거운 컴퓨팅 되세요!

author

Pranay Kapgate

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.