Python предоставляет способ обработки произвольного количества аргументов в функции с помощью специальных символов. Эти символы — * и **, и они используются перед именами переменных для обозначения *args и **kwargs соответственно. Вы можете называть параметры *args или **kwargs как угодно, но по общепринятой конвенции их называют args (аргументы) и kwargs (именованные аргументы).
*args используется для передачи произвольного количества неименованных аргументов в функцию. Вот пример:
def add(*args):
res = 0 # Инициализируем итоговый результат нулем
for num in args: # Проходим по списку переданных аргументов
res += num # Добавляем каждое число к сумме
return res
print(add(3, 5, 7, 9)) # 24
В этой программе args — это кортеж значений, которые мы передаем функции. Таким образом, в приведенном выше примере args равен (3, 5, 7, 9). Это позволяет нам передавать функции любое количество аргументов.
**kwargs
**kwargs позволяет нам передавать произвольное количество именованных аргументов. Иными словами, мы используем **kwargs для передачи любых именованных аргументов нашей функции. Вот пример:
def introduce(**kwargs):
for key, value in kwargs.items(): # Проходим по всем парам "ключ-значение"
print(f'{key}: {value}') # Выводим каждую пару "ключ-значение"
introduce(Name='Alice', Age=25, Country='USA')
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'
В приведенной выше программе kwargs — это словарь с парами "ключ-значение", которые мы передаем функции. Таким образом, в примере выше kwargs равен {'Name': 'Alice', 'Age': 25, 'Country': 'USA'}.
Вы также можете комбинировать *args и **kwargs в определении функции. При этом *args должно предшествовать **kwargs.
В этой функции args — это кортеж значений (1, 2, 3), а kwargs — это словарь с парами {'Name': 'Alice', 'Age': 25}.
Гибкость в обработке любого количества аргументов и именованных аргументов может быть очень полезна, когда вы хотите, чтобы ваши функции были более динамичными и универсальными.
Комбинирование *args и **kwargs с обычными аргументами функции
*args и **kwargs можно использовать в сочетании с обычными аргументами функции. В таких случаях необходимо помнить несколько правил:
Правильный порядок аргументов в определении функции должен быть следующим: стандартные аргументы, затем *args, затем **kwargs.
Стандартные аргументы (также известные как позиционные аргументы) всегда должны быть указаны перед *args и **kwargs.
Здесь 1 и 2 — это стандартные аргументы, соответствующие a и b в определении функции. Кортеж (3, 4, 5) представляет дополнительные неименованные аргументы, которые собираются в args. Остальные именованные аргументы собираются в kwargs в виде словаря.
При использовании *args и **kwargs вместе со стандартными аргументами убедитесь, что вы не забыли указать стандартные аргументы при вызове функции, иначе это вызовет TypeError. Например, вызов function_example(1, Name='Alice', Age=25) без указания значения для аргумента b приведет к ошибке.