Вопрос о ключевых ( именованных ) аргументах
Python разработан так , что при вызове функции указание позиционного аргумента после ключевого вызывает ошибку :
def sum (a,b) :
return a + b
print (sum(b = 3,5)) # синтаксическая ошибка
Здесь всё понятно : 2 значения попадают в 1 параметр b , а параметр a остаётся без значения . Но даже если указать аргументы "правильно" , получится синтаксическая ошибка :
def sum (a,b) :
return a + b
print (sum(a = 3,5)) # синтаксическая ошибка
Сначала я подумал , что это сделано , чтобы программисты по случайности не отправляли 2 значения в 1 параметр . Но такую - же ошибку можно допустить , если указать позиционный аргумент перед ключевым :
def sum (a,b) :
return a + b
print (sum(3,a=5)) # два значения в одном параметре
Вопрос : зачем разработчики языка запретили указывать ключевые аргументы перед позиционными , если даже соблюдая правило можно получить ошибку по той - же причине ?
Ответы (1 шт):
Язык запрещает указание позиционных аргументов после ключевых, потому что непонятно, как определять, к какому позиционному аргументу обращаются - к первому сначала или к первому после ключевого.
def foo(a=1, b=2, c=3):
print(a, b, c)
foo(1, c=4) # i-ый позиционный аргумент к i-ому параметру, всё ОК
# foo(b=1, 2) # 2 относится к a или к c?
В случае указания всех аргументов (2 ключевых явно и 1 позиционный явно) это можно сделать, но это усложнит язык, нарушая принцип из The Zen of Python:
Special cases aren't special enough to break the rules.