Рубрики
Без рубрики

Python: Что такое * args и ** kwargs?

Понимание аргументов переменной длины (* args и ** kwargs) в Python. Теги с Python, новичками, обучением.

Мы можем столкнуться с определениями функций Python, которые выглядят что-то подобное:

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

Звездочки обозначают параметры, способные получать аргументы переменной длины. ( args и kwargs Имена не имеют значения – они просто конвенции, а подписываются «аргументы» и «аргументы ключевых слов» соответственно. Могут использоваться любые соответствующие имена параметров.)

Скажем, нам нужна функция, позволяющая пользователям поделиться своими хобби, но мы заранее не знаем, сколько увлеченных пользователей будет:

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

Мы также можем вызвать нашу функцию, передавая его словарь, используя аналогичный двойной синтаксис Asterisk:

>>> 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 Отказ

Оригинал: “https://dev.to/adamlombard/python-what-are-args-and-kwargs-35co”