在 Python 中,支持以下类型的运算符:
- 算术运算符
- 比较(关系)运算符
- 逻辑(布尔)运算符
- 位运算符
- 赋值运算符
- 成员运算符
- 身份运算符
1. 算术运算符
运算符 | 含义 | 示例 |
---|---|---|
+ | 加:两个对象相加,或者一元加 | x + y |
- | 减:两个对象相减,或得到负数 | x - y |
* | 乘:两个操作数相乘,或是返回一个被重复若干次的字符串 | x * y |
/ | 除:两个操作数相除(总是浮点数) | x / y |
% | 取模:返回除法(/ )的余数 | x % y(x/y 的余数) |
// | 取整除(地板除):返回商的整数部分 | x // y |
** | 幂:返回 x 的 y 次幂 | x ** y |
>>> a=10
>>> b=5
>>> print(a+b)
15
>>> print(a-b)
5
>>> print(a*b)
50
>>> print(a/b)
2.0
>>> print(a**b)
100000
>>> print(a//b)
2
>>> print(a%b)
0
2. 比较运算符
运算符 | 含义 | 示例 |
---|---|---|
> | 大于:如果左操作数大于右操作数,则为 True | x > y |
< | 小于:如果左操作数小于右操作数,则为 True | x < y |
== | 等于:如果两个操作数相等,则为 True | x == y |
!= | 不等于:如果两个操作数不相等,则为 True | x != y |
>= | 大于等于:如果左操作数大于或等于右操作数,则为 True | x >= y |
<= | 小于等于:如果左操作数小于或等于右操作数,则为 True | x <= y |
>>> a=10
>>> b=20
>>> a==b
False
>>> a!=b
True
>>> a>b
False
>>> a<b
True
>>> a>=b
False
>>> a<=b
True
【注】在一些地方,回用 1 代表 True、0 代表 False。
3. 赋值运算符
运算符 | 示例 | 等价于 |
---|---|---|
= | x = 5 | x = 5 (相同) |
+= | x += 5 | x = x + 5 |
-= | x -= 5 | x = x - 5 |
*= | x *= 5 | x = x * 5 |
/= | x /= 5 | x = x / 5 |
%= | x %= 5 | x = x % 5 |
//= | x //= 5 | x = x // 5 |
**= | x **= 5 | x = x ** 5 |
&= | x &= 5 | x = x & 5 |
|= | x |= 5 | x = x | 5 |
^= | x ^= 5 | x = x ^ 5 |
>>= | x >>= 5 | x = x >> 5 |
<<= | x <<= 5 | x = x << 5 |
>>> a=10
>>> b=20
>>> c=0
>>> c=a+b
>>> print(c)
30
>>> c+=10
>>> print(c)
40
>>> c-=a
>>> print(c)
30
>>> c*=a
>>> print(c)
300
>>> c/=a
>>> print(c)
30.0
>>> c%=a
>>> print(c)
0.0
>>> c=a**5
>>> print(c)
100000
>>> c//=b
>>> print(c)
5000
>>> print(b)
20
4. 位运算符
运算符 | 含义 | 示例 |
---|---|---|
& | 按位与(AND):参与运算的两个值的两个相应位都为1,则该位的结果为1;否则为0 | x & y |
| | 按位或(OR):参与运算的两个值的两个相应位有一个为1,则该位的结果为1;否则为0 | x | y |
~ | 按位翻转/取反(NOT):对数据的每个二进制位取反,即把 1 变为 0 ,把 0 变为 1 | ~x |
^ | 按位异或(XOR):当两个对应的二进制位相异时,结果为1 | x ^ y |
>> | 按位右移 :运算数的各个二进制位全部右移若干位 | x >> 2 |
<< | 按位左移:运算数的各个二进制位全部左移若干位,高位丢弃,地位不补 0 | x << 2 |
>>> a=10 #a=0000 1010
>>> b=8 #b=0000 1000
>>> a & b #0000 1000
8
>>> a | b #0000 1010
10
>>> a ^ b #0000 0010
2
>>> c=~a #a的补码 = 原码 = 0000 1010 (0000 1010)取反 (1111 0101)
>>> print(c) #(1111 0101)取反(0000 1010)
-11 #(0000 1010)+ (0000 0001) = (0000 1011) (前面加上负号)
>>> c=a>>2 #a=0000 1001
>>> print(c) #c=0000 0010
2
>>> c=a<<2 #c=0010 1000
>>> print(c)
40
【注】~num 单目运算,对数的每一位取反,结果为 -(num+1)
- 在计算机里面,负数是以补码存储的
- 原码求补码:取反,+1
- 补码求原码:取反,+1
- 取反操作是在原码上进行的!
【例】(1) 求~4, 我们用二进制来表示4:
4 的原码: 0000 0100
取反得到: 1111 1011, 观察符号,是负数,因为负数以补码存储的,所以问题转化为:
某个数 x 的补码是 1111 1011,求 x 的值(由补码求原码)
取反: 0000 0100
+1: 0000 0101 = 5, 加上标点符号(负号) 得到结果: -5
(2) 求 ~-5,同理用二进制表示-5:
因为 -5 是负数,所以它是以 5 的补码表示的,所以转化为已知 5 的补码,求对应的原码,然后在取反.
5补码: 0000 0101,
取反: 1111 1010
+1: 1111 1011, 得到原码
取反: 0000 0100 = 4 ,加上标点负号(正号)得到结果:4
5. 逻辑运算符
运算符 | 含义 | 示例 |
---|---|---|
and | x and y | 逻辑与:如果 x 为 False,返回 false;否则返回 y 的计算值 |
or | x or y | 逻辑或:如果 x 是非 0,返回 x 的值;否则返回 y 的计算值 |
not | not x | 逻辑非:如果 x 为 False,返回 True;如果 x 为 True,返回 False |
>>> a=10
>>> b=20
>>> a and b
20
>>> a or b
10
>>> not a
False
>>> not -1
False
>>> not 0
True
6. 成员运算符
运算符 | 含义 | 示例 |
---|---|---|
in | 如果在指定序列中找到值/变量,返回 True;否则返回 False | 5 in x |
not in | 如果在指定序列中没有找到值/变量,返回 True;否则返回 False | 5 not in x |
>>> a=10
>>> b=5
>>> list=[1,2,3,4,5]
>>> a in list
False
>>> a not in list
True
>>> b in list
True
>>> b not in list
False
7. 身份运算符
身份运算符用于检查两个值(或变量)是否位于存储器的同一部分。
注意: 两个变量相等,并不意味着它们也相同。
运算符 | 含义 | 示例 |
---|---|---|
is | 如果操作数相同,则为 True(引用同一个对象) | x is True |
is not | 如果操作数不相同,则为 True(引用不同的对象) | x is not True |
>>> a= 10
>>> b= 10
>>> print(a is b)
True
>>> print(a is not b)
False
>>> b=20
>>> print(a is b)
False
>>> print(a is not b)
True
8. 运算符优先级
【注】从低到高
运算符 | 描述 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |