Python中的运算符官方详解(附代码)
Operators
我们将简要介绍一下运算符及其用法。
请注意,您可以使用解释器交互式地计算示例中给出的表达式。例如,要测试表达式 2 + 3,请使用交互式 Python 解释器提示符:
2 + 3
5
3 * 5
15
以下是可用运算符的快速概述:
添加两个对象
3 + 5 gives 8. ‘a’ + ‘b’ gives ‘ab’.
给出一个数字与另一个数字的减法;如果第一个操作数不存在,则假定它为零。
-5.2 表示负数,50 – 24 表示 26。
给出两个数字的乘法或返回重复多次的字符串。
2 * 3 得到 6。‘la’ * 3 给出 ‘lalala’。
** (power)
将 x 返回到 y 的幂
3 ** 4 得到 81(即 3 * 3 * 3 * 3)
/ (divide)
将 x 除以 y
13 / 3 给出 4.3333333333333333
// (divide and floor)(分割和下限)
将 x 除以 y,然后将答案向下舍入到最接近的整数值。请注意,如果其中一个值是 float,您将返回 float。
13 // 3 给出 4
-13 // 3 给出 -5
9//1.81 给出 4.0
% (modulo)
返回除法的余数
13 % 3 得到 1。-25.5 % 2.25 得到 1.5。
<<(左移)
将数字的位向左移动指定的位数。(每个数字在内存中由位或二进制数字表示,即 0 和 1)
2 << 2 得到 8。2 用 10 表示。
左移 2 位得到 1000,表示十进制 8。
’>>(右移)
将数字的位向右移动指定的位数。
11 >> 1 得到 5。
11 用 1011 表示,当右移 1 位时得到 101,即十进制 5。
& (位与)
数字的按位 AND:如果两个位都是 1,则结果为 1。否则为 0。
5 & 3 给出 1 (0101 & 0011 给出 0001)
|(按位 OR)
数字的按位 OR:如果两个位都为 0,则结果为 0。否则,它是 1。
5 | 3 给出 7 (0101 | 0011 给出 0111)
^ (按位 XOR)
数字的按位 XOR:如果两个位(1 或 0)相同,则结果为 0。否则,它是 1。
5 ^ 3 给出 6(0101 ^ 0011 给出 0110)
~(按位反转)
x 的按位反转为 -(x+1)
~5 得到 -6。更多详情,请访问 http://stackoverflow.com/a/11810203
< (小于)
返回 x 是否小于 y。所有比较运算符都返回 True 或 False。请注意这些名称的大小写。
5 < 3 给出 False,3 < 5 给出 True。
比较可以任意链接:3 < 5 < 7 给出 True。
’>(大于)
返回 x 是否大于 y
5 > 3 返回 True。如果两个操作数都是数字,则首先将它们转换为通用类型。否则,它始终返回 False。
<=(小于或等于)
返回 x 是否小于或等于 y
x = 3; y = 6; x <= y 返回 True
‘>=(大于或等于)
返回 x 是否大于或等于 y
x = 4; y = 3; x >= 3 返回 True
== (等于)
比较对象是否相等
x = 2; y = 2; x == y 返回 True
x = ‘str’; y = ‘stR’; x == y 返回 False
x = ‘str’; y = ‘str’; x == y 返回 True
!= (不等于)
如果对象不相等,则进行比较
x = 2; y = 3; x != y 返回 True
not (布尔值 NOT)
如果 x 为 True,则返回 False。如果 x 为 False,则返回 True。
x = True;而不是 x 返回 False。
AND (布尔值 AND)
如果 x 为 False,则 x 和 y 返回 False,否则返回 y 的计算
x = False; y = True;x 和 y 返回 False,因为 x 为 False。在这种情况下,Python 不会计算 y,因为它知道 ‘and’ 表达式的左侧是 False,这意味着无论其他值如何,整个表达式都将是 False。这称为短路评估。
or (布尔值 OR)
如果 x 为 True,则返回 True,否则返回 y 的计算结果
x = True; y = False;x 或 y 返回 True。短路评估也适用于此处。
数学运算和赋值的快捷方式
通常对变量运行数学运算,然后将运算结果赋值给变量,因此此类表达式有一个快捷方式:
a = 2
a = a * 3
can be written as: 可以写成:
a = 2
a *= 3
请注意,这将 var = var operation expression 变为 var operation= expression。
Evaluation Order 评估顺序
如果你有一个表达式,比如 2 + 3 * 4,是先做加法还是先做乘法?我们的高中数学告诉我们,应该先进行乘法。这意味着乘法运算符的优先级高于加法运算符。
下表提供了 Python 的优先级表,从最低优先级(绑定最少)到最高优先级(绑定性最强)。这意味着在给定的表达式中,Python 将首先计算表中较低的运算符和表达式,然后再计算表中列在较高位置的运算符和表达式。
为了完整起见,提供了下表,该表摘自 Python 参考手册。最好使用括号对运算符和操作数进行适当的分组,以便显式指定优先级。这使得程序更具可读性。有关详细信息,请参阅下面的更改 Order of Evaluation (更改评估顺序)。
lambda : Lambda 表达式
if – else :条件表达式
or : Boolean OR
and : Boolean AND
not x : 布尔值 NOT
in, not in, is, is not, <, <=, >, >=, !=, == :比较,包括成员资格测试和身份测试
| : Bitwise OR |:
^ : Bitwise XOR ^ :
& : Bitwise AND
<<, >> : Shifts
+, – : 加法和减法
*, /, //, % : 乘法、除法、向下取整除法和余数
+x, -x, ~x : 正、负、按位 NOT
** : 幂运算
x[index], x[index:index], x(arguments…), x.attribute :订阅、切片、调用、属性引用
(expressions…), [expressions…], {key: value…}, {expressions…} :绑定或元组显示、列表显示、字典显示、设置显示
我们尚未遇到的运算符将在后面的章节中解释。
具有相同优先级的运算符列在上表的同一行中。例如,+ 和 – 具有相同的优先级。
更改求值顺序
为了使表达式更具可读性,我们可以使用括号。例如,2 + (3 * 4) 绝对比 2 + 3 * 4 更容易理解,后者需要了解运算符优先级。与其他所有内容一样,括号应该合理使用(不要过度使用),并且不应该是多余的,如 (2 + (3 * 4))。
使用括号还有一个额外的好处 – 它可以帮助我们改变计算的顺序。例如,如果您希望在表达式中的乘法之前计算加法,则可以编写类似 (2 + 3) * 4 的内容。
Associativity 关联性
运算符通常从左到右关联。这意味着具有相同优先级的运算符以从左到右的方式计算。例如,2 + 3 + 4 的计算结果为 (2 + 3) + 4。
Expressions 表达 式
示例(另存为 expression.py):
length = 5
breadth = 2
area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))
// Output: 输出:
$ python expression.py
Area is 10
Perimeter is 14
How It Works 如何运作
矩形的长度和宽度以相同的名称存储在变量中。我们借助表达式使用这些来计算矩形的面积和周长。我们将表达式 length * breadth 的结果存储在变量区域中,然后使用 print 函数打印它。在第二种情况下,我们直接在 print 函数中使用表达式 2 * (length + breadth) 的值。
另外,请注意 Python 如何漂亮地打印输出。即使我们没有在 ‘Area is’ 和变量 area 之间指定一个空格,Python 也为我们提供了它,以便我们得到一个干净漂亮的输出,并且这样程序的可读性要高得多(因为我们不需要担心用于输出的字符串中的间距)。这是 Python 如何让程序员的生活更轻松的一个例子。
Summary 总结
我们已经了解了如何使用运算符、操作数和表达式 – 这些是任何程序的基本构建块。接下来,我们将看到如何在我们的程序中使用 statements 来利用这些。
作者:Te amo Συγγνώμη