> 백엔드 개발 > 파이썬 튜토리얼 > Python&# *args 및 **kwargs 이해

Python&# *args 및 **kwargs 이해

Linda Hamilton
풀어 주다: 2024-11-01 06:53:31
원래의
549명이 탐색했습니다.

Understanding Python

Python은 단순성과 유연성으로 유명하며, 이는 가변 개수의 인수로 함수를 처리하는 능력에서 비롯되는 경우가 많습니다.

두 개의 특수 기호인 *args와 **kwargs는 이러한 유연성에서 중추적인 역할을 합니다.

이 기사에서는 이러한 기호의 의미, 사용 방법, 그토록 강력한 이유에 대해 알아봅니다.


*args의 기본

*args 매개변수를 사용하면 함수가 원하는 수의 위치 인수를 허용할 수 있습니다.

별표(*)는 모든 위치 인수를 튜플로 수집해야 한다는 Python에 대한 신호입니다

.

*args 실행 예

def greet(*args):
    for name in args:
        print(f"Hello, {name}!")

greet('Alice', 'Bob', 'Charlie')

로그인 후 복사
로그인 후 복사

출력:

Hello, Alice!
Hello, Bob!
Hello, Charlie!

로그인 후 복사
로그인 후 복사

설명:

  • greet 함수는 위치 인수를 원하는 수만큼 허용합니다.
  • 함수 내에서 args는 전달된 모든 인수를 포함하는 튜플입니다.
  • 각 이름에 대한 인사말을 인쇄하기 위해 args를 반복합니다.

*args에 대해 처음 알았을 때 비디오 게임의 새로운 차원을 여는 듯한 느낌이 들었습니다. 함수를 정의하는 것이 훨씬 간단해졌습니다.


**kwargs에 뛰어들기

마찬가지로 **kwargs를 사용하면 함수가 원하는 수의 키워드 인수를 허용할 수 있습니다.

이중 별표(**)는 Python이 모든 키워드 인수를 사전으로 수집하도록 지시합니다.

**kwargs 실행 예

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

display_info(name='Alice', age=30, city='New York')

로그인 후 복사
로그인 후 복사

출력:

name: Alice
age: 30
city: New York

로그인 후 복사
로그인 후 복사

설명:

  • display_info 함수는 여러 개의 키워드 인수를 허용합니다.
  • 함수 내부에서 kwargs는 모든 키워드 인수를 포함하는 사전입니다.
  • kwargs.items()를 반복하여 각 키-값 쌍을 인쇄합니다.

유연한 명명된 매개변수 집합이 필요한 함수를 처리할 때 **kwargs를 사용하면 생명을 구할 수 있습니다. 코드를 깔끔하고 체계적으로 유지해줍니다.


*args와 **kwargs 결합

동일한 함수에서 *args와 **kwargs를 모두 사용하여 모든 유형의 인수를 허용할 수 있습니다.

복합사용 예시

def make_sentence(*args, **kwargs):
    sentence = ' '.join(args)
    for key, value in kwargs.items():
        sentence += f" {key} {value}"
    print(sentence)

make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')

로그인 후 복사
로그인 후 복사

출력:

I love Python exclamation ! emoji ?

로그인 후 복사
로그인 후 복사

설명:

  • args는 위치 인수를 튜플로 수집합니다.
  • *kwargs는 키워드 인수를 사전으로 수집합니다.
  • 위치 인수를 결합하고 키워드 인수를 추가하여 문장을 구성합니다.

*args와 **kwargs를 혼합하면 올바른 재료를 모두 사용하여 요리하는 것과 같은 느낌이 듭니다. 요리를 망칠 필요 없이 원하는 대로 레시피를 조정할 수 있습니다.


매개변수의 순서

*args 및 **kwargs를 사용할 때 함수 정의에 배치하는 순서가 중요합니다.

  1. 정규 위치 인수
  2. 인수
  3. 키워드 인수(기본값이 없는 인수)
  4. 기본값이 있는 키워드 인수
  5. *크워그

올바른 주문 예

def greet(*args):
    for name in args:
        print(f"Hello, {name}!")

greet('Alice', 'Bob', 'Charlie')

로그인 후 복사
로그인 후 복사

잘못된 주문 예시

Hello, Alice!
Hello, Bob!
Hello, Charlie!

로그인 후 복사
로그인 후 복사

저는 이 주문에 대해 인정하고 싶은 것보다 더 많은 실수를 했습니다. 매개변수 순서를 다시 확인하면 디버깅 시간이 많이 절약됩니다!


* 및 **를 사용하여 인수 압축 풀기

별표는 함수 정의뿐만 아니라 함수 호출 시에도 유용합니다.

시퀀스와 사전을 인수로 풀 수 있습니다.

포장 풀기의 예

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

display_info(name='Alice', age=30, city='New York')

로그인 후 복사
로그인 후 복사

출력:

name: Alice
age: 30
city: New York

로그인 후 복사
로그인 후 복사

설명:

  • 숫자는 튜플을 위치 인수로 압축 해제합니다.
  • *세부사항은 사전을 키워드 인수로 압축을 풉니다.

이 기능을 사용하면 특히 목록이나 사전에 자연스럽게 포함되는 데이터를 처리할 때 코드가 훨씬 깔끔해졌습니다.


실제 용도

유연한 기능 인터페이스

함수 시그니처를 변경하지 않고 다양한 수의 입력을 처리하는 함수를 원하는 경우.

def make_sentence(*args, **kwargs):
    sentence = ' '.join(args)
    for key, value in kwargs.items():
        sentence += f" {key} {value}"
    print(sentence)

make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')

로그인 후 복사
로그인 후 복사

데코레이터 및 래퍼

데코레이터를 작성할 때 래핑된 함수가 수신할 인수 수를 모르는 경우가 많습니다.

I love Python exclamation ! emoji ?

로그인 후 복사
로그인 후 복사

데코레이터는 제가 Python에서 가장 좋아하는 기능 중 하나이며 *args와 **kwargs를 사용하면 가능합니다.


피해야 할 일반적인 실수

매개변수 위치가 잘못됨: *args 및 **kwargs가 함수 서명에 올바르게 배치되었는지 확인하세요.

과도한 사용: *args 및 **kwargs는 강력하지만 과도하게 사용하면 코드를 이해하기 어려울 수 있습니다.

별표 잊어버리기: args와 kwargs는 단지 관례일 뿐이라는 점을 기억하세요. 별표(*, **)가 이 제품을 특별하게 만들어줍니다.

def func(a, b, *args, **kwargs):
    pass

로그인 후 복사

균형이 중요합니다. 어디에서나 *args 및 **kwargs를 사용하고 싶은 유혹이 있지만 때로는 명시적인 매개변수가 더 명확할 때도 있습니다.


결론

*args와 **kwargs를 이해하면 Python 프로그래밍에 무한한 가능성이 열립니다.

임의의 인수를 처리할 수 있는 함수를 작성할 수 있는 유연성을 제공하여 코드를 더욱 동적이고 적응 가능하게 만듭니다.

*args와 **kwargs를 마스터한 것이 내 Python 여정의 전환점이 되었습니다.

코딩이 더욱 즐거워지고 프로그램이 더욱 강력해졌습니다. 아직 이러한 기능을 살펴보지 않았다면 직접 살펴보는 것이 좋습니다!

위 내용은 Python&# *args 및 **kwargs 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿