Функции в 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 важен порядок аргументов:
- Позиционные аргументы (без *).
- *args (позиционные аргументы).
- Именованные аргументы (с ключевыми словами).
- **kwargs (именованные аргументы).
*args и **kwargs повышают гибкость и читаемость кода, позволяя создавать функции с переменным числом аргументов. Важно соблюдать порядок аргументов.