Мы можем столкнуться с определениями функций 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”