运算符
运算符:以1+2为例,1和2称为操作数,“+”称为运算符。
Python语言支持一下类型的运算符:
1.算数运算符
2.比较(关系)运算符
3.赋值运算符
4.逻辑运算符
5.位运算符
6.成员运算符
7.身份运算符
8.三目运算符
一、算数运算符
以下假设变量:a = 10, b = 20
Python中,有三种除法。
第一种 / :
print(10/2) # 结果为:5.0
/ 除法计算结果是浮点数,即使两个整数恰好是整除,结果也是浮点数。
第二种 // :
print(10//3) # 结果为:3
// 这种除法只取整数部分,余数抛弃。
第三种 % :(余数运算),可以得到两个整数相除的余数
print(10%3) # 结果为 1
如果想同时得到商和余数,可以用下边的方法
print(divmod(10, 2)) # 结果为:(5, 0)
因为浮点数精度的问题,Python还存在一些计算方面的小问题,例如:
print(0.1+0.1+0.1-0.3) # 结果为: 5.551115123125783e-17
不是应该等于0吗?Python居然......?
要解决这个问题,可以导入decimal模块:
from decimal import Decimal a = Decimal("0.1") + Decimal("0.1") + Decimal("0.1") - Decimal("0.3") print(a)
注意其中提供的数字是用字符串的形式传递给Decimal的。
二、比较运算符
假设变量a = 10, 变量b = 20
a = 21 b = 10 c = 0 if a == b: print("1 - a 等于 b") else: print("1 - a 不等于 b") if a != b: print("2 - a 不等于 b") else: print("2 - a 等于 b") if a < b: print("3 - a 不等于 b") else: print("3 - a 等于 b") if a < b: print("4 - a 小于 b") else: print("4 - a 大于等于 b") if a > b: print("5 - a 大于 b") else: print("5 - a 小于等于 b") # 修改变量 a 和 b 的值 a = 5 b = 20 if a <= b: print("6 - a 小于等于 b") else: print("6 - a 大于 b") if b >= a: print("7 - b 大于等于 a") else: print("7 - b 小于 a")
1 - a 不等于 b 2 - a 不等于 b 3 - a 不等于 b 4 - a 大于等于 b 5 - a 大于 b 6 - a 小于等于 b 7 - b 大于等于 a
三、赋值运算符
以下假设变量a为10,变量b为20:
ps:a +=b之类的操作相当于 a = a+b,不是a = b + a ,方向不要整反了。
a = 21 b = 10 c = 0 c = a + b print("1: c的值为:", c) c += a print("2: c的值为:", c) c *= a print("3: c的值为:", c) c /= a print("4: c的值为:", c) c = 2 c % a print("5: c的值为:", c) c **= a print("6: c的值为:", c) c //= a print("7: c的值为:", c)
1: c的值为: 31 2: c的值为: 52 3: c的值为: 1092 4: c的值为: 52.0 5: c的值为: 2 6: c的值为: 2097152 7: c的值为: 99864
四、位运算符
按位运算符是把数字看作二进制来进行计算的。
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
a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b # 12 = 0000 1100 print("1 - c 的值为:", c) c = a | b # 61 = 0011 1101 print("2 - c 的值为:", c) c = a ^ b # 49 = 0011 0001 print("3 - c 的值为:", c) c = ~a # -61 = 1100 0011 print("4 - c 的值为:", c) c = a << 2 # 240 = 1111 0000 print("5 - c 的值为:", c) c = a >> 2 # 15 = 0000 1111 print("6 - c 的值为:", c)
1 - c 的值为: 12 2 - c 的值为: 61 3 - c 的值为: 49 4 - c 的值为: -61 5 - c 的值为: 240 6 - c 的值为: 15
五、逻辑运算符
Python语言支持逻辑运算符,但是没有其他语言中的&&和||语法,取而代之的是人性化的 and,or,not(全部是小写)。
以下假设变量a = 10,b = 20;
a = 10 b = 20 if a and b: print("1 - 变量 a 和 b 都为 true") else: print("1 - 变量 a 和 b 有一个不为 true") if a or b: print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true") else: print("2 - 变量 a 和 b 都不为 true") # 修改变量 a 的值 a = 0 if a and b: print("3 - 变量 a 和 b 都为 true") else: print("3 - 变量 a 和 b 有一个不为 true") if a or b: print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true") else: print("4 - 变量 a 和 b 都不为 true") if not (a and b): print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false") else: print("5 - 变量 a 和 b 都为 true")
1 - 变量 a 和 b 都为 true 2 - 变量 a 和 b 都为 true,或其中一个变量为 true 3 - 变量 a 和 b 有一个不为 true 4 - 变量 a 和 b 都为 true,或其中一个变量为 true 5 - 变量 a 和 b 都为 false,或其中一个变量为 false
六、成员运算符
in 与 not in是Python独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者是Flase。
传统的方式,判断某集合里是否有某个元素时,都是使用for循环遍历一次集合,逐一进行对比,最后给出结果。
lis = [1, 2, 3, 4] a = 1 flag = False for i in lis: if i == a: flag = True break if flag: print("a在列表中") else: print("a不在列表中")
那么使用in判断,是不是简单一点。
lis = [1, 2, 3, 4] a = 1 if a in lis: print("a在列表中") else: print("a不在类表中")
七、身份运算符
也是Python的特色语法(全部都是小写字母)。身份运算符用于比较两个对象的储存单元。
ps:is与比较运算符中的 == 是有区别的,切记不可混用。
a = 20 b = 20 if a is b: print("a和b有相同的标识") else: print("a和b没有相同的标识") if a is not b: print("a和b没有相同的标识") else: print("a和b有相同的标识") a = 30 if a is b: print("a和b有相同的标识") else: print("a和b没有相同的标识") if a is not b: print("a和b没有相同的标识") else: print("a和b有相同的标识")
a和b有相同的标识
a和b有相同的标识
a和b没有相同的标识
a和b没有相同的标识
is用于判断两个变量的引用是否为同一个对象,而 == 用于判断变量引用的对象的值是否相等。
id():查看某个变量或对象的内存地址,两个相同内存地址的对象被认为是同一个对象。
a = [1, 2, 3] b = a print(id(a)) # 内存地址 2894684568584 print(id(b)) # 内存地址 2894684568584 print(a is b) # 结果为True 引用的是同一个对象 print(a == b) # 判断值是否相等 b = a[:] print(id(a)) # 内存地址 2729119202312 print(id(b)) # 内存地址 2729119200904 print(b is a) # 结果为Flase,引用的不是同一个对象 print(b == a) # 比较的还是值
八、三目运算符(三元表达式)
Python中的三元表达式不像其他语言一样的表示方式:判断条件? 为真时的结果 : 为假时的结果。
在Python的格式为:为真时的结果 if 判断条件 else 为假时的结果
a = 1 b = 2 c = True if a == b else False print(c) # 结果为 False
九、运算符优先级
表中列出了从最高到最低优先级的所有运算符。优先级高的运算符优先计算或处理,同级别的从左到右的顺序计算(赋值运算符除外,它是按照从右到左的顺序)