Python 操作符优先级

你好,有抱负的 Python 程序员!今天,我们将深入探讨一个一开始可能看起来有点吓人的话题,但我保证一旦我们分解它,你会发现它非常吸引人。我们要讨论的是 Python 操作符优先级。将其视为 Python 中操作的“啄食顺序”。让我们一起踏上这个激动人心的旅程吧!

Python - Operator Precedence

什么是操作符优先级?

在我们深入了解 Python 特定的细节之前,先来了解一下操作符优先级的一般含义。想象一下你在一个忙碌的厨房里(请跟我来,我保证这个类比是有意义的)。在这个厨房里,不同的厨师负责不同的任务。有些人在切菜,有些人在煎炸,还有些人在装盘。现在,这些任务需要按照特定的顺序来完成,以创造出完美的菜肴。这个顺序类似于编程中的操作符优先级。

在 Python 中,当您编写一个带有多个操作符的表达式时,操作符优先级决定了这些操作的执行顺序。就像在我们的厨房类比中一样,有些操作优先于其他操作。

让我们看一个简单的例子:

result = 5 + 3 * 2
print(result)

你认为输出会是什么?如果你猜是 11,那你就对了!但是为什么呢?

这就是操作符优先级发挥作用的地方。在 Python(和大多数编程语言)中,乘法优先级高于加法。所以,表达式是这样计算的:

  1. 首先,计算 3 * 2,结果是 6
  2. 然后,将 5 加到 6 上,得到 11

如果我们想改变这个顺序,我们会使用括号,像这样:

result = (5 + 3) * 2
print(result)

现在输出将是 16,因为括号具有最高的优先级,迫使加法在乘法之前发生。

Python 操作符优先级表

现在我们了解了这个概念,让我们来看看 Python 的完整操作符优先级表。请记住,表中顶部的操作符优先级高于下面的操作符。

优先级 操作符 描述
1 () 括号
2 ** 指数
3 +x, -x, ~x 一元加,一元减,按位 NOT
4 *, /, //, % 乘法,除法,整除,取模
5 +, - 加法,减法
6 <<, >> 按位左移,按位右移
7 & 按位 AND
8 ^ 按位 XOR
9 | 按位 OR
10 ==, !=, >, >=, <, <=, is, is not, in, not in 比较,身份,成员运算符
11 not 逻辑 NOT
12 and 逻辑 AND
13 or 逻辑 OR

如果其中一些操作符看起来不熟悉,请不要担心。我们现在将专注于最常见的一些。

Python 操作符优先级示例

让我们通过一些示例来了解这个优先级表在实际中是如何工作的。

示例 1:算术操作符

result = 10 + 5 * 2 - 3 ** 2
print(result)

让我们一步步分解:

  1. 3 ** 2 = 9(指数运算具有最高优先级)
  2. 5 * 2 = 10(然后是乘法)
  3. 10 + 10 - 9 = 11(加法和减法从左到右执行)

所以,最终结果是 11。

示例 2:比较和逻辑操作符

x = 5
y = 10
z = 15

result = x < y and y < z or x == z
print(result)

这是如何评估的:

  1. x < y 是 True
  2. y < z 是 True
  3. x == z 是 False
  4. True and True 是 True
  5. True or False 是 True

所以,最终结果是 True。

示例 3:混合不同类型的操作符

a = 2
b = 3
c = 4

result = a * b ** 2 + c > (a + b) * c and not a == b
print(result)

让我们分解一下:

  1. b ** 2 = 9(指数运算首先)
  2. a * 9 = 18(然后是乘法)
  3. 18 + c = 22(加法)
  4. (a + b) = 5(括号具有最高优先级)
  5. 5 * c = 20(乘法)
  6. 22 > 20 是 True(比较)
  7. a == b 是 False(等式检查)
  8. not False 是 True(逻辑 NOT)
  9. True and True 是 True(逻辑 AND)

最终结果是 True。

结论

理解操作符优先级对于编写正确且高效的 Python 代码至关重要。它帮助您预测您的表达式将如何被评估,并避免意外结果。记住,当您有疑问时,请使用括号来明确定义操作的顺序。这不仅确保您的代码按预期工作,而且使代码对其他人(以及未来的您)来说更可读!

随着您继续 Python 之旅,您将更加熟悉这些优先级规则。如果一开始看起来很困难,请不要担心——通过练习,它将成为您的第二天性。继续编码,继续实验,最重要的是,玩得开心!毕竟,编程就像烹饪——你练习得越多,你的“菜肴”就会越好。祝编码愉快,未来的 Python 大厨们!

Credits: Image by storyset