二章、Python中的运算符
Simple is better than complex. ——The Zen of Python
运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算。Python中的运算符主要包括算数运算符、赋值运算符、比较关系运算符、逻辑运算符。使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。例如,使用算数运算符连接起来的式子称为算数表达式,使用逻辑运算符连接起来的式子,称为逻辑表达式。
一、算数运算符
算数运算符是处理四则运算的符号,在数字处理中应用的最多。
运算符 | 说明 | 实例 | 结果 |
+ | 加 | 220+284 | 504 |
- | 减 | 1210-1184 | 26 |
* | 乘 | 220*284 | 62480 |
/ | 除 | 1210/1184 | 1.0219594594594594 |
% | 求余,返回除法的余数 | 1210%284 | 74 |
// | 取整除,返回商的整数部分 | 1210//220 | 5 |
** | 幂,返回x的y次方 | 2**3 | 8 |
在算数运算符使用“%”求余计算时,如果除数是负数,那么取得的结果也是一个负数。使用除法运算符和求余运算符时,除数不能为0,不然会报错。在Python中,算数运算符可以直接对数字进行运算,且运算符的优先级和数学中的优先级是一致的。
此外在Python中,* 运算符还可以用于字符串中,计算结果就是字符串重复指定次数的结果,示例如下:
In [1]: print('Love'*10) LoveLoveLoveLoveLoveLoveLoveLoveLoveLov
二、赋值运算符
赋值运算符主要用来为变量赋值。使用时可以直接把基本赋值运算符“=”右边的值赋值给左边的变量,也可以进行某些运算后把值赋值给左边的变量,常用的赋值运算符如下所示:
运算符 | 说明 | 举例 | 展开形式 |
= | 简单的赋值运算 | x=y | x=y |
+= | 加法赋值 | x+=y | x=x+y |
-= | 减法赋值 | x-=y | x=x-y |
*= | 乘法赋值 | x*=y | x=x*y |
/= | 除法赋值 | x/=y | x=x/y |
%= | 取余数赋值 | x%=y | x=x%y |
**= | 幂赋值 | x**=y | x=x**y |
//= | 取整赋值 | x//=y | x=x//y |
注意:“=”和“==”这是容易混淆的两个运算符,前者为刚讲到的赋值运算符,“==”则是比较运算符。
三、比较运算符
比较运算符也称关系运算符。用于对变量表达或表达式的结果进行大小、真假的比较,如果比较结果为真,则返回True,如果为假,则返回False。比较运算符通常用在条件语句中作为判断的依据。Python中常见的比较运算符如下:
运算符 | 作用 | 示例 | 结果 |
> | 大于 | 220>284 | Falae |
< | 小于 | 220<284 | True |
== | 等于 | 1210==1210 | True |
!= | 不等于 | 220!=220 | False |
>= | 大于等于 | 220>=284 | False |
<= | 小于等于 | 220<=284 | True |
在Python中,当需要判断一个值是否介于两个值之间时,可以采用“值1< 变量 <值2”的形式,示例如下:
In [1]: a=26 In [2]: 0<26<30 Out[2]: True
四、逻辑运算符
逻辑运算符是对真和假两种布尔值进行运算,然后运算的结果仍是一个布尔值,Python中的逻辑运算主要包含and(逻辑与)、or(逻辑或)、not(逻辑非)。赋值运算符说明如下:
运算符 | 含义 | 用法 | 结合方向 |
and | 逻辑与 | eg1 and eg2 | 从左到右 |
or | 逻辑或 | eg1 or eg2 | 从左到右 |
not | 逻辑非 | not eg | 从右到左 |
常用的逻辑运算符运算结果:
表达式1 | 表达式2 | 表达式1 and 表达式2 | 表达式1 or 表达式2 | not 表达式1 |
True | True | True | True | False |
True | False | False | True | False |
False | False | False | False | True |
False | True | False | True | True |
五、位运算符
位运算符是把数字看做二进制数来进行计算的,因此,需要先将要执行的数据转化为你二进制,然后才能执行计算。Python中的位运算符有位与(&)、位或(|)、位异或(^)、取反(~)、左移位(<<)和右位移(>>)运算符。
1. “位与(&)”运算
“位与”运算的运算符为“&”,运算法则:参与运算的两个数字都用二进制表示,只有对应为都是1时,结果位才是1,否则为0.如果两个参与运算的数字精度不同,则结果的精度与精度高的数字相同。
2. “位或(|)”运算
“位或”运算的运算符为“|”,运算法则:参与运算的两个数字都用二进制表示,只有对应为都是0时,结果位才是0,否则为1.如果两个参与运算的数字精度不同,则结果的精度与精度高的数字相同。
3.“位异或(^)”运算
“位异或”运算的运算符为“^”,运算法则:参与运算的两个数字都用二进制表示,当两个二进制位相同(同时为0或同时为1)时,结果为0,否则为1.如果两个参与运算的数字精度不同,则结果的精度与精度高的数字相同。
4. “位取反”运算
“位取反”运算也称“位非”运算,运算符“~”,运算法则:就是讲操作数中对应的二进制位数1修改为0,0修改为1.
5.左移位运算符 <<
左移位运算符<<是将一个二进制数,向左移动指定的位数,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充,左移位运算相当于乘以2的n次幂.
6.右移位运算>>
右移位运算符>>是将一个二进制数向右移动指定的位数,右边(低位端)溢出的位被丢弃,而在填充左边(高位端)的空位时,如果最高位是0(正数),左侧空位填入0;如果最高位是1(负数),左侧空位填入1。右移位运算相当于除以2的n次幂.
1 a = 60 # 60 = 0011 1100
2 b = 13 # 13 = 0000 1101
3 c = 0
4 c = a & b; # 12 = 0000 1100
5 print("1 - c 的值为:", c)
6 c = a | b; # 61 = 0011 1101
7 print("2 - c 的值为:", c)
8 c = a ^ b; # 49 = 0011 0001
9 print("3 - c 的值为:", c)
10 c = ~a; # -61 = 1100 0011
11 print("4 - c 的值为:", c)
12 c = a << 2; # 240 = 1111 0000
13 print("5 - c 的值为:", c)
14 c = a >> 2; # 15 = 0000 1111
15 print("6 - c 的值为:", c)
16 输出:
17 1 - c 的值为: 12
18 2 - c 的值为: 61
19 3 - c 的值为: 49
20 4 - c 的值为: -61
21 5 - c 的值为: 240
22 6 - c 的值为: 15
六、成员运算符
Python支持成员运算符,判断某值是否包含在指定序列中。
in 运算符:如果在指定序列中找到值返回True,否则返回False。eg: x在y序列中,如果x在y序列中返回True.
not in 运算符:如果在指定序列中没有找到返回值,返回True,否则返回False。 eg:x不在y序列中,如果x不在y序列中,则返回True.示例如下:
1 a = 10
2 b = 20
3 list = [1, 2, 3, 4, 5];
4 if (a in list):
5 print("变量 a 在给定的列表中 list 中")
6 else:
7 print("变量 a 不在给定的列表中 list 中")
8 if (b not in list):
9 print("变量 b 不在给定的列表中 list 中")
10 else:
11 print("变量 b 在给定的列表中 list 中")
12 # 修改变量 a 的值
13 a = 2
14 if (a in list):
15 print("变量 a 在给定的列表中 list 中")
16 else:
17 print("变量 a 不在给定的列表中 list 中")
18 输出:
19 变量 a 不在给定的列表中 list 中
20 变量 b 不在给定的列表中 list 中
21 变量 a 在给定的列表中 list 中
七、身份运算符
身份运算符用于比较两个对象的存储单元.
is 运算符: 判断两个标识符是否引用自同一个对象,eg: x is y,类似id(x)==id(y),如果引用的是同一个对象则返回True,否则返回 False.
is not 运算符: 判断两个标识符是否引用自不同对象,eg: x is not y,类似id(x)!=id(y),如果引用的不是同一个对象则返回True,否则返回 False.
1 a = 20;b = 20 2 if (a is b): 3 print("1 - a 和 b 有相同的标识") 4 else: 5 print("1 - a 和 b 没有相同的标识") 6 if (id(a) == id(b)): 7 print("2 - a 和 b 有相同的标识") 8 else: 9 print("2 - a 和 b 没有相同的标识") 10 # 修改变量 b 的值 11 b = 30 12 if (a is b): 13 print("3 - a 和 b 有相同的标识") 14 else: 15 print("3 - a 和 b 没有相同的标识") 16 17 if (a is not b): 18 print("4 - a 和 b 没有相同的标识") 19 else: 20 print("4 - a 和 b 有相同的标识") 21 输出: 22 1 - a 和 b 有相同的标识 23 2 - a 和 b 有相同的标识 24 3 - a 和 b 没有相同的标识 25 4 - a 和 b 没有相同的标识
is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
>>> a = [1,2,3] >>> b=a >>> b is a True >>> b==a True >>> b=a[:] >>> b is a False >>> b == a True
八、运算符的优先级
如下表所示,该表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算 |
在实际开发中,如果搞不清楚优先级可以使用括号来确保运算的执行顺序.