Смешивание позиционных и именованных аргументов
Вы можете смешивать оба стиля, если хотите - есть только одно нерушимое правило: Вы должны помещать позиционные аргументы перед именованными.
Если Вы немного подумаете, Вы наверняка догадаетесь, почему.
Чтобы показать Вам, как это работает, мы будем использовать следующую простую функцию с тремя параметрами:
def adding(a, b, c):
print(a, "+", b, "+", c, "=", a + b + c)
Ее цель - вычислить и вывести сумму всех своих аргументов.
Функция при вызове следующим образом:
adding(1, 2, 3)
выведет:
1 + 2 + 3 = 6
output
Как вы можете догадаться, это был пример позиционной передачи аргументов.
Конечно же, Вы можете заменить такой вызов вариантом с передачей по имени, например:
adding(c = 1, a = 2, b = 3)
Наша программа выведет такую строку:
2 + 3 + 1 = 6
output
Обратите внимание на порядок значений.
Теперь попробуем смешать оба стиля.
Посмотрите на вызов функции ниже:
adding(3, c = 1, b = 2)
Давайте проанализируем его:
- аргумент (
3
) для параметраa
передается позиционным способом; - аргументы для
c
иb
указаны с помощью имен.
вот, что Вы увидите в консоли:
3 + 2 + 1 = 6
output
Будьте осторожны и остерегайтесь ошибок. Если Вы попытаетесь передать более одного значения одному аргументу, все, что Вы получите, - это ошибка выполнения.
Посмотрите на вызов ниже - кажется, мы дважды пытались задать значение a
:
adding(3, a = 1, b = 2)
Ответ Python:
TypeError: adding() got multiple values for argument 'a'
output
Посмотрите на код ниже. Такой код полностью корректен, но не имеет особого смысла:
adding(4, 3, c = 2)
Все правильно, но оставить только один именованный аргумент выглядит немного странно - как Вы думаете?