Когда вы говорите
def f(a,b,c,d):
вы говорите python, что f
принимает 4 позиционных аргументов. Каждый раз, когда вы вызываете f
, ему должно быть задано ровно 4 аргумента, и первое значение будет присвоено a
, второе - b
и т. Д.
Вам разрешено звонить f
с чем-то вроде
f(1,2,3,4)
или f(a=1,b=2,c=3,d=4)
, или даже f(c=3,b=2,a=1,d=4)
но во всех случаях должно быть указано ровно 4 аргумента.
f(b=1,c=1,d=1)
возвращает ошибку, поскольку для a
не было предоставлено значение. (0 дано)
f(a=1,b=1,c=1)
возвращает ошибку, поскольку для d
не было предоставлено значение. (3 дано)
Количество приведенных аргументов указывает, как далеко Python прошел до того, как понял, что произошла ошибка.
Кстати, если вы скажете
def f(a=1,b=2,c=3,d=4):
тогда вы говорите python, что f
принимает 4 необязательных аргументов. Если определенный аргумент не указан, то его значение по умолчанию предоставляется автоматически. Тогда вы могли бы сойти с звонка
f(a=1,b=1,c=1)
или f(b=1,c=1,d=1)