Позиционный аргумент следует за ключевым аргументом | Ошибка при вызове функции

Во-первых, я понимаю, что при определении функции вы должны сначала разместить позиционные аргументы, а затем аргументы по умолчанию, чтобы избежать ситуации неоднозначности для интерпретатора. Вот почему, когда мы пытаемся это сделать, выдается ошибка.

Например, в следующем коде 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')

Я не знаю, можете ли вы определить переменную одновременно с вызовом функции.

Сидней

Другие вопросы по тегам