我正在研究Python中的运算符,并且遇到多个概念,当一个表达式中有多个运算符时,这些概念决定评估的顺序。
我了解运算符优先级的概念,并且在Python文档中遇到了operator precedence table。有几件事使我感到困惑,
后面的问题源于我在互联网上各个地方阅读过的运营商分类,他们将运营商归为以下类别
但是,当我在Python文档的运算符优先级表中看到诸如lambda
,if-else
之类的关键字时,我感到困惑。此外,operator mapping table in documentation for operator module包括del
之类的关键字,它们既不是Internet上常规分类的一部分,也不是Python文档中的优先级表。
我的最后一个问题是“是否可以对
进行分组?
Python中运算符的类别及其行为(优先级,链接,关联性等)?还是我应该独立研究每个操作员及其行为?”
答案 0 :(得分:1)
为什么分配和扩充分配运算符未包含在列表中?
因为它们不是真正的运算符。为了方便起见,有时我们称它们为运算符,但是它们不能形成表达式,因此相对于真实运算符没有优先级。
在Python中真正算作算子的是什么? (运算符和关键字之间没有任何区别。)
根据operators上的文档,似乎可以构成表达式的任何标点符号。为简单起见,我更喜欢将运算符定义为可以构成表达式的任何标点或关键字。
但是,当我在Python文档的运算符优先级表中看到
lambda
,if
-else
之类的关键字时,我感到困惑。
那些是可以构成表达式的关键字,因此它们必须具有运算符优先级。请注意,if
-else
可以是表达式或语句块,具体取决于语法:
# Expression
a if condition else b
# Statement
if condition:
pass
else:
pass
此外,操作员模块文档中的操作员映射表包括诸如
del
之类的关键字,它们既不是Internet上常规分类的一部分,也不是Python文档中的优先级表。
del
不是运算符,因为它仅用于产生副作用。但是,它可以潜在地修改对象,因此在operator
库中包含执行相同功能的函数是有意义的。 del
的另一个用途是删除变量,这是函数无法执行的操作。
我的最后一个问题是:“关于 Python中运算符的类别及其行为(优先级,链接,关联性等)?还是我应该独立研究每个操作员及其行为?”
运算符始终可以组合在一起以形成更大的表达式,因此它们必须具有优先级和关联性才能定义非平凡表达式的含义。非运算符语法通常形成一个语句或一组语句。