lambda
claramente es una palabra clave; es una palabra especial reconocida por el analizador, que de lo contrario caería dentro de la definición de identifier
.
lambda
no es semánticamente operador. Un operador es solo una función, pero invocado con una sintaxis diferente. Podemos imaginarnos reemplazar al operador +
con una función add
; todos nuestros programas con adición serían más detallados y difíciles de leer, pero aún podríamos escribirlos. El constructo de lenguaje lambda
por otro lado no se pudo reemplazar con una función; lambda x: x+1
no es solo calcular un resultado de los valores x
y x+1
, porque en este contexto no son valores en absoluto (x
es el nombre del parámetro para la función que se está definiendo, y x+1
es el código del cuerpo lambda).
En la misma página se ha vinculado a que tenemos: http://docs.python.org/py3k/reference/lexical_analysis.html#operators
Los siguientes símbolos son operadores:
+ - * ** / // %
<< >> & | ^ ~
< > <= >= == !=
Eso es todo el contenido de la subsección sobre los operadores. De esto lo tomo para significar que en el contexto de definir los símbolos del lenguaje "operadores" son operadores simbólicos, mientras que la sección palabras clave está explícitamente deletreando que "estas cosas que de otro modo serían identificadores son palabras clave". Es por eso que creo que los operadores de palabra clave como not
, is
, in
, etc. no aparecen en la lista. Pero ciertamente hay cosas que son semánticamente operadores que son palabras clave, ya sea que el analizador las considere clases separadas o no.
No estoy seguro de por qué http://docs.python.org/py3k/reference/expressions.html#summary describe lambda
como operador; Ciertamente no lo haría. Estrictamente hablando, no dice explícitamente "lambda
es el operador con la precedencia más baja", solo enumera lambda
en una tabla cuyo encabezado de columna es "Operador". Tal vez fue solo una conveniencia; describir lambda
como una cosa con baja precedencia es una buena forma de aclarar cómo analizará Python lambda x: x + 1
(teóricamente podría ser (lambda x: x) + 1
o lambda x: (x + 1)
).
Estoy bastante seguro de que es sensato llamar a 'lambda' una palabra clave en lugar de un operador. – alberge
@alberge ¿Cuál es su razonamiento? – Paragon
Claramente contraté los dedos antes que el cerebro. Varias palabras clave de python * son * operadores. Parecen ser conjuntos superpuestos. – alberge