如何在Python中对运算符及其行为进行分类?

时间:2019-07-14 17:12:44

标签: python python-3.x

我正在研究Python中的运算符,并且遇到多个概念,当一个表达式中有多个运算符时,这些概念决定评估的顺序。

我了解运算符优先级的概念,并且在Python文档中遇到了operator precedence table。有几件事使我感到困惑,

  • 为什么分配和扩充分配运算符未包含在列表中?
  • 在Python中真正算作算子的是什么? (并且operator和关键字之间没有任何区别。)

后面的问题源于我在互联网上各个地方阅读过的运营商分类,他们将运营商归为以下类别

  • 算术运算符
  • 比较运算符
  • 分配运算符
  • 逻辑运算符
  • 按位运算符
  • 会员运营商
  • 身份运算符

但是,当我在Python文档的运算符优先级表中看到诸如lambdaif-else之类的关键字时,我感到困惑。此外,operator mapping table in documentation for operator module包括del之类的关键字,它们既不是Internet上常规分类的一部分,也不是Python文档中的优先级表。

我的最后一个问题是“是否可以对
进行分组? Python中运算符的类别及其行为(优先级,链接,关联性等)?还是我应该独立研究每个操作员及其行为?”

1 个答案:

答案 0 :(得分:1)

  

为什么分配和扩充分配运算符未包含在列表中?

因为它们不是真正的运算符。为了方便起见,有时我们称它们为运算符,但是它们不能形成表达式,因此相对于真实运算符没有优先级。

  

在Python中真正算作算子的是什么? (运算符和关键字之间没有任何区别。)

根据operators上的文档,似乎可以构成表达式的任何标点符号。为简单起见,我更喜欢将运算符定义为可以构成表达式的任何标点或关键字

  

但是,当我在Python文档的运算符优先级表中看到lambdaif-else之类的关键字时,我感到困惑。

那些是可以构成表达式的关键字,因此它们必须具有运算符优先级。请注意,if-else可以是表达式或语句块,具体取决于语法:

# Expression
a if condition else b

# Statement
if condition:
    pass
else:
    pass
  

此外,操作员模块文档中的操作员映射表包括诸如del之类的关键字,它们既不是Internet上常规分类的一部分,也不是Python文档中的优先级表。

del不是运算符,因为它仅用于产生副作用。但是,它可以潜在地修改对象,因此在operator库中包含执行相同功能的函数是有意义的。 del的另一个用途是删除变量,这是函数无法执行的操作。

  

我的最后一个问题是:“关于   Python中运算符的类别及其行为(优先级,链接,关联性等)?还是我应该独立研究每个操作员及其行为?”

运算符始终可以组合在一起以形成更大的表达式,因此它们必须具有优先级和关联性才能定义非平凡表达式的含义。非运算符语法通常形成一个语句或一组语句。