Python: *args, **kwargs и виды аргументов функций

Функции в Python поддерживают различные способы передачи аргументов. Рассмотрим позиционные и именованные аргументы, а также возможности *args и **kwargs.

Виды аргументов функций

Функции могут принимать позиционные и именованные аргументы.

Рассмотрим функцию сумма, вычисляющую сумму трёх чисел:

def сумма(a, b, c):
    print(a + b + c)

Вызов с позиционными аргументами:

сумма(1, 2, 3)  # Выведет 6

1 соответствует a, 2 — b, 3 — c. Меньшее количество аргументов вызовет ошибку:

сумма(1, 2)  # Ошибка: недостаточно позиционных аргументов

Функция ожидает три аргумента.

Можно задать значения по умолчанию для параметров:

def сумма(a, b=7, c=8):
    print(a + b + c)

Теперь вызов с одним аргументом будет работать:

сумма(1)  # Выведет 16 (1 + 7 + 8)

Передача значений для некоторых параметров:

сумма(1, 80, 70) # Выведет 151

Значения по умолчанию игнорируются.

Именнованные аргументы позволяют передавать значения, указывая имя параметра:

сумма(c=1, a=70, b=80) # Выведет 151

Порядок аргументов не важен, так как указано соответствие значений параметрам.

*args и **kwargs

Для работы с неизвестным заранее количеством аргументов используются *args и **kwargs.

*args собирает произвольное число позиционных аргументов в кортеж:

def сумма(*args):
    print(args)  # args — кортеж
    print(type(args)) # <class 'tuple'>
    print(sum(args)) # Сумма элементов кортежа

сумма(7, 8, 9, 1, 10, 5)

Функция сумма принимает любое количество аргументов, собираемых в кортеж args.

**kwargs собирает произвольное число именованных аргументов в словарь:

def бренд(**kwargs):
    print(kwargs) # kwargs — словарь
    for имя, значение in kwargs.items():
        print(f"{имя}: {значение}")

бренд(apple="iPhone", samsung="Galaxy")

Функция бренд принимает любое количество именованных аргументов, собираемых в словарь kwargs.

Порядок аргументов

При использовании *args и **kwargs важен порядок аргументов:

  1. Позиционные аргументы (без *).
  2. *args (позиционные аргументы).
  3. Именованные аргументы (с ключевыми словами).
  4. **kwargs (именованные аргументы).

*args и **kwargs повышают гибкость и читаемость кода, позволяя создавать функции с переменным числом аргументов. Важно соблюдать порядок аргументов.

Что будем искать? Например,программа