파이썬: *args와 **kwargs는 무엇입니까?

다음과 같은 Python 함수 정의를 만날 수 있습니다.

def a_function(*args, **kwargs):
    ...


별표는 가변 길이 인수를 수신할 수 있는 매개변수를 나타냅니다. (argskwargs 이름은 중요하지 않습니다. 이는 단지 규칙일 뿐이며 각각 '인수' 및 '키워드 인수'를 나타냅니다. 적절한 매개변수 이름을 사용할 수 있습니다.)

사용자가 취미를 공유할 수 있는 기능이 필요하지만 주어진 사용자가 얼마나 많은 취미를 갖게 될지 미리 알지 못한다고 가정해 보겠습니다.

def my_hobbies(*hobbies):
    print("My hobbies: " + ", ".join(hobbies))


이제 함수는 하나 이상의 인수를 허용합니다.

>>> my_hobbies('reading', 'writing')
My hobbies: reading, writing

>>> my_hobbies('reading', 'writing', 'hiking', 'learning Python')
My hobbies: reading, writing, hiking, learning Python


편리하게도 유사한 별표 구문을 사용하여 튜플을 전달하여 함수를 호출할 수도 있습니다.

>>> some_hobbies = ('reading', 'writing', 'hiking', 'learning Python')
>>> my_hobbies(*some_hobbies)
My hobbies: reading, writing, hiking, learning Python


이제 사용자가 좋아하는 것을 다양한 범주로 공유할 수 있는 기능을 원하지만 주어진 사용자가 몇 개의 범주를 선택할지 미리 알 수 없다고 가정해 보겠습니다.

def my_faves(**favorites):
    print("My favorite things...")
    for category, fave in favorites.items():
        print(f"{category}: {fave}")


우리의 함수는 이제 하나 또는 그 이상을 받아들입니다:

>>> my_faves(Color='green', Fruit='persimmon')
My favorite things...
Color: green
Fruit: persimmon

>>> my_faves(Season='winter', Language='Python', Website='dev.to')
My favorite things...
Season: fall
Language: Python
Website: dev.to


유사한 이중 별표 구문을 사용하여 사전을 전달하여 함수를 호출할 수도 있습니다.

>>> some_faves = {"Animal": "whale", "Summer Hobby": "hiking"}
>>> my_faves(**some_faves)
My favorite things...
Animal: whale
Summer Hobby: hiking


함수는 형식 매개변수, 가변 길이 매개변수 및 가변 길이 키워드 매개변수를 혼합하여 정의할 수 있습니다. 그렇게 할 때 정의에 다음 순서로 나타나야 합니다.

def a_function(arg, *args, **kwargs):
    ...


자세한 내용은 Python documentation 에서 찾을 수 있습니다.

좋은 웹페이지 즐겨찾기