Python 语言支持以下类型的运算符:
- 算术运算符
- 赋值运算符
- 比较(关系)运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
算术运算符
以下假设变量 a 为21,变量 b 为10:
运算符 | 描述 | 实例 | 运算结果 |
---|---|---|---|
+ | 加 两个对象相加 |
a + b | 31 |
- | 减 得到负数或是一个数减去另一个数 |
a - b | 11 |
* | 乘 两个数相乘或是返回一个被重复若干次的字符串 |
a * b | 210 |
/ | 除 x 除以 y |
a / b | 2.1 |
// | 取整除 向下取接近商的整数 |
a // b -a // b |
2 -3 |
% | 取模 返回除法的余数 |
a % b | 1 |
** | 幂 返回x的y次幂 |
a ** b | 21^10 |
以下实例演示了Python所有算术运算符的操作:
#!/usr/bin/python3
a = 21
b = 10
result = 0
result = a + b
print ("a + b 的值为:", result)
result = a - b
print ("a - b 的值为:", result)
result = a * b
print ("a * b 的值为:", result)
result = a / b
print ("a / b 的值为:", result)
result = a % b
print ("a % b 的值为:", result)
result = a // b
print ("a // b 的值为:", result)
result = -a // b
print ("-a // b 的值为:", result)
result = 2 ** 3
print ("2 ** 3 的值为:", result)
"""
a + b 的值为: 31
a - b 的值为: 11
a * b 的值为: 210
a / b 的值为: 2.1
a % b 的值为: 1
a // b 的值为: 2
-a // b 的值为: -3
2 ** 3 的值为: 8
"""
赋值运算符
以下假设变量a为21,变量b为10:
运算符 | 描述 | 实例 | 等价与 |
---|---|---|---|
= | 简单的赋值运算符 | c = a + b | 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a | c = c + a |
-= | 减法赋值运算符 | c -= a | c = c - a |
*= | 乘法赋值运算符 | c *= a | c = c * a |
/= | 除法赋值运算符 | c /= a | c = c / a |
%= | 取模赋值运算符 | c %= a | c = c % a |
**= | 幂赋值运算符 | c **= a | c = c ** a |
//= | 取整除赋值运算符 | c //= a | c = c // a |
:= | 海象运算符 可在表达式内部为变量赋值。Python3.8 版本新增运算符。 |
在这个示例中,赋值表达式可以避免调用 len() 两次: |
以下实例演示了Python所有赋值运算符的操作:
#!/usr/bin/python3
a = 21
b = 10
c = 0
c = a + b
print ("c = a + b 的值为:", c)
c += a
print ("c += a 的值为:", c)
c *= a
print ("c *= a 的值为:", c)
c /= a
print ("c /= a 的值为:", c)
c %= a
print ("c %= a 的值为:", c)
c **= a
print ("c **= a 的值为:", c)
c //= a
print ("c //= a 的值为:", c)
print ("c := a 的值为:", c := a)
"""
c = a + b 的值为: 31
c += a 的值为: 52
c *= a 的值为: 1092
c /= a 的值为: 52.0
c %= a 的值为: 10.0
c **= a 的值为: 1e+21
c //= a 的值为: 4.761904761904762e+19
c := a 的值为: 21
"""
比较运算符
以下假设变量a为21,变量b为10:
运算符 | 描述 | 实例 | 结果 |
---|---|---|---|
== | 等于 比较对象是否相等 |
a == b | False |
!= | 不等于 比较两个对象是否不相等 |
a != b | True |
> | 大于 返回x是否大于y |
a > b | True |
< | 小于 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 |
a < b | False |
>= | 大于等于 返回x是否大于等于y。 |
a >= b | True |
<= | 小于等于 返回x是否小于等于y。 |
a <= b | False |
以下实例演示了Python所有比较运算符的操作:
#!/usr/bin/python3
a = 21
b = 10
c = 0
if ( a == b ):
print ("a 等于 b")
else:
print ("a 不等于 b")
if ( a != b ):
print ("a 不等于 b")
else:
print ("a 等于 b")
if ( a < b ):
print ("a 小于 b")
else:
print ("a 大于等于 b")
if ( a > b ):
print ("a 大于 b")
else:
print ("a 小于等于 b")
# 修改 a = 10
a = 10
if ( a <= b ):
print ("修改a=10后 a小于等于 b")
else:
print ("修改a=10后 a大于b")
if ( b >= a ):
print ("修改a=10后 b大于等于 a")
else:
print ("修改a=10后 b小于a")
"""
a 不等于 b
a 不等于 b
a 大于等于 b
a 大于 b
修改a=10后 a小于等于 b
修改a=10后 b大于等于 a
"""
逻辑运算符
Python语言支持逻辑运算符,以下假设变量 a 为 21, b为 10:
运算符 | 描述 | 实例 | 结果 |
---|---|---|---|
and | 布尔与 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 |
a and b | 10 |
or | 布尔或 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值 |
a or b | 21 |
not | 布尔非 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 |
not(a and b) | False |
以上实例输出结果:
#!/usr/bin/python3
a = 21
b = 10
if ( a and b ):
print ("变量a和b都为true",a and b)
else:
print ("变量a和b有一个不为true",a and b)
if ( a or b ):
print ("变量a和b都为true,或其中一个变量为true",a and b)
else:
print ("变量a和b都不为true",a and b)
# 修改a=0
a = 0
if ( a and b ):
print ("修改a=0后: 变量a和b都为true",a and b)
else:
print ("修改a=0后: 变量a和b有一个不为true",a and b)
if ( a or b ):
print ("修改a=0后: 变量a和b都为true,或其中一个变量为true",a and b)
else:
print ("修改a=0后: 变量a和b都不为true",a and b)
if not( a and b ):
print ("修改a=0后: 变量a和b都为false,或其中一个变量为false",not( a and b ))
else:
print ("修改a=0后: 变量a和b都为true",not( a and b ))
if not a:
print ("修改a=0后: not a=",not a)
"""
变量a和b都为true 10
变量a和b都为true,或其中一个变量为true 10
修改a=0后: 变量a和b有一个不为true 0
修改a=0后: 变量a和b都为true,或其中一个变量为true 0
修改a=0后: 变量a和b都为false,或其中一个变量为false True
修改a=0后: not a= True
"""
位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13二进制格式如下:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
A | B | A&B | A|B | A^B |
0011 1100 | 0000 1101 | 0000 1100 | 0011 1101 | 0011 0001 |
对应的十进制整数 | ||||
60 | 13 | 12 | 61 | 49 |
运算符 | 描述 | 实例 | 结果 |
---|---|---|---|
& | 按位与 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
a & b | 12 二进制 0000 1100 |
| | 按位或 只要对应的二个二进位有一个为1时,结果位就为1。 |
a | b | 61 二进制 0011 1101 |
^ | 按位异 当两对应的二进位相异时,结果为1 |
a ^ b | 49 二进制 0011 0001 |
~ | 按位取反 对数据的每个二进制位取反,即把1变为0,把0变为1。 ~x 类似于 -x-1 |
~a | -61 二进制 1100 0011 在一个有符号二进制数的补码形式 |
<< | 左移动 运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。 |
a << 2 | 240 二进制 1111 0000 |
>> | 右移动 把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数 |
a >> 2 | 15 二进制 0000 1111 |
以下实例演示了Python所有位运算符的操作:
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b
print("1 - c 的值为:", c) # 12 = 0000 1100
c = a | b
print("2 - c 的值为:", c) # 61 = 0011 1101
c = a ^ b
print("3 - c 的值为:", c) # 49 = 0011 0001
c = ~a
print("4 - c 的值为:", c) # -61 = 1100 0011
c = a << 2
print("5 - c 的值为:", c) # 240 = 1111 0000
c = a >> 2
print("6 - c 的值为:", c) # 15 = 0000 1111
"""
1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15
"""
Python成员运算符
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
以下实例演示了Python所有成员运算符的操作:
#!/usr/bin/python3
a = 10
b = 20
list = [1, 2, 3, 4, 5 ]
if ( a in list ):
print ("变量a=10:在给定的列表中 list 中")
else:
print ("变量a=10:不在给定的列表中 list 中")
if ( b not in list ):
print ("变量b=20: 不在给定的列表中list中")
else:
print ("变量b=20: 在给定的列表中list中")
# 修改变量 a 的值
a = 2
if ( a in list ):
print ("变量a=2: 在给定的列表中 list 中")
else:
print ("变量a=2: 不在给定的列表中 list 中")
"""
变量a=10:不在给定的列表中 list 中
变量b=20: 不在给定的列表中list中
变量a=2: 在给定的列表中 list 中
"""
Python身份运算符
身份运算符用于比较两个对象的存储单元
运算符 | 描述 | 实例 |
---|---|---|
is | 判断两个标识符是不是引用自一个对象 | x is y 类似 id(x) == id(y) 如果引用的是同一个对象则返回 True,否则返回 False |
is not | 判断两个标识符是不是引用自不同对象 | x is not y 类似 id(a) != id(b) 如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
⚠️注意: id() 函数用于获取对象内存地址。
以下实例演示了Python所有身份运算符的操作:
#!/usr/bin/python3
a = 20
b = 20
print ("id(a)=%d,id(b)=%d"%(id(a),id(b)))
if ( a is b ):
print ("a 和 b 有相同的标识")
else:
print ("a 和 b 没有相同的标识")
if ( id(a) == id(b) ):
print ("a 和 b 有相同的标识")
else:
print ("a 和 b 没有相同的标识")
# 修改变量 b 的值
b = 30
if ( a is b ):
print ("a 和 b 有相同的标识")
else:
print ("a 和 b 没有相同的标识")
if ( a is not b ):
print ("a 和 b 没有相同的标识")
else:
print ("a 和 b 有相同的标识")
"""
id(a)=4449353040,id(b)=4449353040
a 和 b 有相同的标识
a 和 b 有相同的标识
a 和 b 没有相同的标识
a 和 b 没有相同的标识
"""
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,求余数和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += = *= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
以下实例演示了Python所有运算符优先级的操作:
#!/usr/bin/python3
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d
print ("(a + b) * c / d 运算结果为:", e) # (30 * 15) / 5 = 90.0
e = ((a + b) * c) / d
print ("((a + b) * c) / d 运算结果为:", e) # (30 * 15 ) / 5 = 90.0
e = (a + b) * (c / d)
print ("(a + b) * (c / d) 运算结果为:", e) # (30) * (15/5) = 90.0
e = a + (b * c) / d
print ("a + (b * c) / d 运算结果为:", e) # 20 + (150/5) = 50.0
and 拥有更高优先级:
x = True
y = False
z = False
if (x or y) and z:
print("yes")
else:
print("no")
if x or (y and z):
print("yes")
else:
print("no")
"""
no
yes
"""
⚠️注意:Pyhton3 已不支持 <> 运算符,可以使用 != 代替,如果你一定要使用这种比较运算符,可以使用以下的方式
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True