В cPython 2.4:
def f(a,b,c,d):
pass
>>> f(b=1,c=1,d=1)
TypeError: f() takes exactly 4 non-keyword arguments (0 given)
но:
>>> f(a=1,b=1,c=1)
TypeError: f() takes exactly 4 non-keyword arguments (3 given)
Очевидно, я действительно действительно не понимаю механизм обработки аргумента функции Python. Кто-либо хочет совместно использовать некоторый свет на этом? Я вижу то, что происходит (что-то как заполняющиеся слоты аргумента, затем сдаваясь), но я думаю, что это испортило бы новичка.
(также, если у людей есть лучшие ключевые слова вопроса - что-то как "кишки" - повторно отметьте),
Когда вы говорите
def f(a,b,c,d):
Вы говорите Python, что f
занимает 4 позиционирование аргументов. Каждый раз, когда вы называете F
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 Дано)
Количество данных ARGS указывает на то, насколько далеко Python получил до реализации, есть ошибка.
Кстати, если вы говорите
def f(a=1,b=2,c=3,d=4):
, то ваши говорят Python, что F
занимает 4 Дополнительные аргументы . Если определенный ARG не дан, то значение по умолчанию автоматически поставляется для вас. Тогда вы можете уйти с вызовом
F (a = 1, b = 1, c = 1)
или f (b = 1, c = 1, d = 1)