lambda
ясно - ключевое слово; это специальное слово, распознанное синтаксическим анализатором, которое в противном случае подпадает под определение identifier
.
lambda
не семантически Оператор. Оператор - это просто функция, но вызывается с другим синтаксисом. Мы можем представить себе замену оператора +
функцией add
; все наши программы с добавлением будут более подробными и трудными для чтения, но мы все равно могли бы написать их. С другой стороны, языковая конструкция lambda
не может быть заменена функцией; lambda x: x+1
не просто вычисляет результат из значений x
и x+1
, так как в этом контексте они вообще не являются значениями (x
- это имя параметра для определяемой функции, а x+1
- код тела лямбды).
На этой же странице вы связаны мы имеем: http://docs.python.org/py3k/reference/lexical_analysis.html#operators
Следующие токены являются операторы:
+ - * ** / // %
<< >> & | ^ ~
< > <= >= == !=
Это все содержимое подраздела на операторов. Из этого я подразумеваю, что в контексте определения жетонов языка «операторы» являются символьными операторами, тогда как в разделе на ключевые слова прямо указывается, что «эти вещи, которые в противном случае были бы идентификаторами, являются ключевыми словами». Вот почему я думаю, что операторы ключевых слов, такие как not
, is
, in
и т. Д., Не указаны. Но, безусловно, есть вещи, которые являются семантическими операторами, которые являются ключевыми словами, независимо от того, считает ли парсер их отдельными классами.
Я не уверен, почему http://docs.python.org/py3k/reference/expressions.html#summary описывает lambda
в качестве оператора; Я, конечно, не стал бы. Строго говоря, он явно не говорит: «lambda
- это оператор с наименьшим приоритетом», он просто перечисляет lambda
в таблице, заголовок столбца которой «Оператор». Возможно, это было просто удобство; описывая lambda
как вещь с низким приоритетом, является хорошим способом разъяснить, как Python будет анализировать lambda x: x + 1
(теоретически это может быть либо , либо lambda x: (x + 1)
).
Я уверен, что разумно называть «лямбда» ключевым словом, а не оператором. – alberge
@alberge Каковы ваши рассуждения? – Paragon
Я четко надел пальцы перед мозгом. Несколько ключевых слов python * являются операторами *. Они кажутся перекрывающимися наборами. – alberge