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

Python의 *args 및 **kwargs를 마스터하세요. 동적 위치 및 키워드 인수를 사용하여 유연한 함수를 작성하고, 컬렉션을 압축 해제하고, 래퍼 함수를 ​​빌드하는 방법을 알아보세요.

Editor에서 이 솔루션을 사용해 보세요.

개요

Python에서는 가변 개수의 인수를 받아들일 수 있는 함수를 디자인해야 하는 경우가 많습니다. 예를 들어 임의 개수의 정수 합계를 계산하는 함수 또는 다양한 필드로 메타데이터를 기록하는 함수가 있습니다. 사용자에게 목록이나 사전을 전달하도록 강요하는 대신 Python은 `*args`와 `**kwargs`라는 두 가지 특수 기호를 제공합니다.

`*args` 구문을 사용하면 함수가 원하는 수의 위치 인수를 허용할 수 있습니다. 단일 별표 '*'는 압축 해제 연산자 역할을 합니다. 함수 정의에 배치되면 추가 위치 인수를 'args'라는 튜플로 수집합니다. 이를 통해 입력 값을 반복하고, 계산을 실행하고, 다른 함수에 쉽게 전달할 수 있습니다.

반면에 `**kwargs` 구문을 사용하면 함수가 키워드(이름이 지정된) 인수를 원하는 수만큼 허용할 수 있습니다. 이중 별표 `**`는 이러한 인수를 `kwargs`라는 사전에 수집합니다. 이는 선택적 구성, 스타일 인수 또는 데이터베이스 속성을 전달하는 데 매우 유용합니다. 기억하세요. 'args'와 'kwargs'라는 이름은 관례입니다. 실제 기능은 단일 및 이중 별표에 의해 결정됩니다.

코드 및 실행 출력

이 코드는 *args를 사용하여 변수 숫자를 합산하고 **kwargs를 사용하여 사용자 프로필을 인쇄하고 두 가지를 단일 함수로 결합하는 방법을 보여줍니다.

def sum_all(*args):
    print("args type:", type(args).__name__)
    return sum(args)

print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))

def print_profile(**kwargs):
    print("kwargs type:", type(kwargs).__name__)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_profile(name="Bob", role="developer", country="US")

def master_function(first, *args, **kwargs):
    print(f"First argument: {first}")
    print(f"Additional positional args: {args}")
    print(f"Keyword args: {kwargs}")

master_function("hello", 1, 2, 3, debug=True, user_id=42)
터미널 출력
args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}

단계별 구현

  • 위치 인수를 튜플로 수집하려면 매개변수(예: *args) 앞에 별표 하나를 사용하세요.
  • 키워드 인수를 사전에 수집하려면 매개변수(예: **kwargs) 앞에 이중 별표를 사용하세요.
  • 표준 매개변수, *args, 키워드 전용 매개변수, **kwargs 등 올바른 매개변수 순서를 유지하세요.
  • *iterable 또는 **dictionary를 전달하여 함수를 호출할 때 압축 풀기 구문을 사용하세요.

자주 묻는 질문

"args"와 "kwargs"라는 이름을 사용해야 합니까?

아니요, 이는 표준 커뮤니티 규칙입니다. * 및 ** 접두사만 구문상 필요합니다. *values ​​및 **options를 작성할 수 있지만 가독성을 위해 *args 및 **kwargs를 고수하는 것이 좋습니다.

함수를 정의할 때 올바른 순서는 무엇입니까?

함수 시그니처에서 올바른 인수 순서는 위치 인수, *args, 키워드 전용 인수, 마지막으로 **kwargs입니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.