Вопрос о ключевых ( именованных ) аргументах

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.

→ Ссылка