Wor*_*red 6 python lambda language-lawyer
在Python 3.2中,根据这个:http://docs.python.org/py3k/reference/expressions.html#summary
lambda 是Python中具有最低优先级的运算符.
根据这个:http://docs.python.org/py3k/reference/lexical_analysis.html#keywords
lambda 是一个Python语言关键字.
但是,根据这个:http://docs.python.org/py3k/reference/lexical_analysis.html#other-tokens
运算符和关键字是不同的实体.
我正在尝试系统地向某人解释Python 3.2,我不想混淆他们.我,我自己,对运营商和关键字的确切定义感到困惑.
我最好的猜测是术语"运算符"在Python解析器和Python词法分析器的上下文中使用时意味着略有不同.
lambda显然是一个关键字;它是解析器识别的特殊单词,否则它会属于identifier.
lambda从语义上讲不是一个运算符。运算符只是一个函数,但使用不同的语法调用。我们可以想象+用函数替换add运算符;我们所有带有加法的程序都会变得更加冗长和难以阅读,但我们仍然可以编写它们。lambda另一方面,语言构造不能用函数代替;lambda x: x+1不仅仅是根据值x和计算结果x+1,因为在这种情况下它们根本不是值(x是正在定义的函数的参数名称,并且x+1是 lambda 主体的代码)。
在您链接到的同一页面中,我们有:http ://docs.python.org/py3k/reference/lexical_analysis.html#operators
以下标记是运算符:
Run Code Online (Sandbox Code Playgroud)+ - * ** / // % << >> & | ^ ~ < > <= >= == !=
这就是关于运算符的小节的全部内容。由此我认为,在定义语言“运算符”的标记的上下文中,“运算符”是符号运算符,而有关关键字的部分明确说明“这些本来是标识符的东西是关键字”。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)lambda x: (x + 1)。