Позиционный аргумент следует за ключевым аргументом | Ошибка при вызове функции
Во-первых, я понимаю, что при определении функции вы должны сначала разместить позиционные аргументы, а затем аргументы по умолчанию, чтобы избежать ситуации неоднозначности для интерпретатора. Вот почему, когда мы пытаемся это сделать, выдается ошибка.
Например, в следующем коде a и b не могут быть оценены во время выполнения, из-за чего выдает ошибку
def func(a=1,b):
return a+b
func(2)
(Error:non-default argument follows default argument
)
Это понятно.
Но почему следующее приводит к ошибке. Это происходит не во время определения функции, а во время вызова функции.
def student(firstname, standard,lastname):
print(firstname, lastname, 'studies in', standard, 'Standard')
student(firstname ='John','Gates','Seventh')
Error:positional argument follows keyword argument
Разве мы не можем передавать параметры с ключевыми словами и без них одновременно? [Редактировать]: Вопрос не является возможными дубликатами, поскольку дубликаты говорят о случае, когда заданы аргументы по умолчанию. Я не определил их. Я просто спрашиваю, почему мы не можем смешивать параметры значения ключевого слова и параметры прямого значения.
2 ответа
Это именно то, что говорит ошибка:
Error:positional argument follows keyword argument
Вы не можете иметь позиционные аргументы после ключевых аргументов.
Ваш пример - хороший тому пример.
Вы указываете первый аргумент в качестве ключевого аргумента. Поэтому неоднозначно, как интерпретатор теперь интерпретирует порядок параметров. 2-й аргумент становится первым параметром? Второй параметр? Но вы уже указали первый параметр (firstname='John'
) так что же происходит с позиционным параметром?
def студент (имя, стандарт, фамилия): печать (имя, фамилия, "обучение в", стандарт, "стандарт")
student(firstname ='John','Gates','Seventh')
Интерпретирует это как:
student(firstname ='John',standard='Gates',lastname='Seventh')
или же
student(firstname ='John',standard='Gates',lastname='Seventh')
или же
student(firstname ='John',firstname='Gates',lastname='Seventh')
Как насчет:
student(lastname ='John','Gates','Seventh')
Это?
student(lastname ='John',firstname='Gates',standard='Seventh')
или это?
student(lastname ='John',standard='Gates',firstname='Seventh')
Удачи в отладке того, какой аргумент соответствует какому параметру.
Может быть, вам стоит попробовать:
student('John', 'Gates', 'Stevehn')
Я не знаю, можете ли вы определить переменную одновременно с вызовом функции.
Сидней