在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词法分析器的上下文中使用时意味着略有不同。
答案 0 :(得分:4)
运营商和关键字是不同的实体。
不,他们不是。 is
,in
,and
,or
,not
,我相信还有更多。{/ p>
答案 1 :(得分:2)
这并不是说它们是相互排斥的,只是:
“存在以下类别的令牌:标识符,关键字, 文字,运算符和分隔符“
我是类别人和美国人。当然,这可能意味着它们是相互排斥的,在这种情况下,文档是不一致的。
答案 2 :(得分:2)
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
以下令牌是运营商:
+ - * ** / // % << >> & | ^ ~ < > <= >= == !=
这是关于运营商的小节的全部内容。从这一点来看,我认为在定义语言标记的上下文中,“运算符”是符号运算符,而关键字的部分明确地说明“这些本来是标识符的东西”是关键词“。这就是我认为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)
)。