介绍
在这个 Lab 中,你将获得对 Python 中操作符优先级的实践理解。就像在数学中一样,Python 遵循特定的规则来确定表达式中操作的执行顺序。对这些规则的透彻理解对于编写正确且可预测的代码至关重要。
我们将从探索基本算术操作符的优先级开始。然后,我们将了解像幂运算和比较这样的更高级操作符是如何融入这个层级的。最后,你将学习如何使用圆括号来覆盖默认的操作顺序,这项技术对于控制计算和提高代码可读性都至关重要。
在这个 Lab 中,你将获得对 Python 中操作符优先级的实践理解。就像在数学中一样,Python 遵循特定的规则来确定表达式中操作的执行顺序。对这些规则的透彻理解对于编写正确且可预测的代码至关重要。
我们将从探索基本算术操作符的优先级开始。然后,我们将了解像幂运算和比较这样的更高级操作符是如何融入这个层级的。最后,你将学习如何使用圆括号来覆盖默认的操作顺序,这项技术对于控制计算和提高代码可读性都至关重要。
在 Python 中,就像在标准数学中一样,某些算术操作符的优先级高于其他操作符。具体来说,乘法 (*) 和除法 (/) 在加法 (+) 和减法 (-) 之前执行。当操作符具有相同的优先级时,它们从左到右进行求值。
让我们观察一下这种行为。设置过程已经为你创建了一个文件。在左侧的 WebIDE 文件浏览器中,找到并打开位于 ~/project 目录中名为 operator_precedence.py 的文件。
将以下代码添加到文件中:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
这个表达式包含加法、乘法、减法和除法。让我们预测一下操作顺序:
4 * 3 等于 12。10 / 5 等于 2.0。请注意,Python 3 中的标准除法总是产生一个浮点数。10 + 12 - 2.0。10 + 12 是 22,而 22 - 2.0 是 20.0。按 Ctrl + S 保存文件。要运行代码,请在 WebIDE 中打开一个终端(Terminal -> New Terminal),然后执行以下命令:
python ~/project/operator_precedence.py
你将看到计算结果打印到终端。
20.0
输出与我们的预测相符,证实了乘法和除法相对于加法和减法的优先级更高。
Python 的操作符层级超出了基本算术运算。幂运算操作符 (**) 的优先级高于乘法和除法。此外,所有算术操作符的优先级都高于比较操作符,例如“大于” (>)。
让我们向脚本中添加更多示例以观察其实际效果。修改 ~/project/operator_precedence.py 文件以包含两个新表达式:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
我们来分析一下新加的行:
2 * 3 ** 2 中,首先计算幂运算 3 ** 2,结果为 9。然后执行乘法 2 * 9,得到 18。18 > 5 + 10 中,首先计算加法 5 + 10,结果为 15。然后评估比较运算 18 > 15,结果为 True。保存文件(Ctrl + S)并再次运行脚本。
python ~/project/operator_precedence.py
终端现在将显示所有三个表达式的结果。
20.0
18
True
这证实了 Python 首先评估幂运算,然后是其他算术运算,最后是比较运算。
尽管 Python 的优先级规则是一致的,但复杂的表达式可能难以阅读。为了覆盖默认顺序或仅仅是为了明确你的意图,你可以使用圆括号 ()。任何用圆括号括起来的表达式都会被优先求值。
让我们修改之前的一个示例来观察圆括号的效果。向 ~/project/operator_precedence.py 的末尾添加一个新的表达式。
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
## Using parentheses to change the order of evaluation.
forced_result = (10 + 4) * 3
print(forced_result)
我们来分析新的一行 (10 + 4) * 3:
10 + 4 在圆括号内,所以它被优先求值,结果为 14。14 * 3,得到 42。这与我们知道结果为 22 的 10 + 4 * 3 不同。圆括号完全改变了结果。
保存文件并最后一次运行脚本。
python ~/project/operator_precedence.py
输出现在将包含我们带圆括号的表达式的结果。
20.0
18
True
42
使用圆括号,即使并非绝对必要,也是一个好习惯。它使操作顺序变得明确,从而提高了代码的可读性,并减少了因优先级理解错误而导致的 Bug 的可能性。
在这个实验中,你探索了 Python 中操作符优先级的基本概念。你从基本的算术运算开始,确认了乘法和除法优先于加法和减法。然后你了解到,其他操作符,如幂运算和比较运算,在层级中也有其特定的位置。
最重要的是,你练习了使用圆括号来明确控制求值顺序。这项技能对于编写不仅功能正确,而且对他人清晰易懂的代码至关重要。通过掌握操作符优先级,你在编写更健壮、更可靠的 Python 程序方面迈出了重要的一步。