1. 运算符
2. 比较运算符
大于 > 小于 < 大于等于 >= 小于等于 <= 不等于 != <>(也是不等于但python3.7不支持了) == 等于
判断结果输出是布尔值
print(2 > 1) #True
print(3 < 2) #False
print(2 >= 2) #True
print(2 <= 1) #False
print(1 != 2) #True
print('hello' == 'hello') #True
#比较符在字符串中使用
#字符串之间使用比较运算符,会根据各个字符逐一编码值(ASCII码表)比较
print('a' > 'b') #False 97 > 98
print('abc' > 'a') #False 97 > 98 逐一对比False就不往下
#字符串和数字不能进行比较,与等于做运算结果为False,与不等于做运算为True,不支持其他的比较运算
# print('a' > 90 )
print('a' == 90) #False
print('a' != 90) #True
3. 逻辑运算符
逻辑与 and(并且) 逻辑或or(或者) 逻辑非not
逻辑与规则:只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True(找第一个False)
print(5 > 3 and 6 < 8 and 1 < 7) #True
print(3 > 1 and 9 < 5 and 2 < 3) #False
逻辑或规则:只要有一个运算是True,结果就是True;只有所有的运算数都是False,结果才是False(找第一个True)
print(5 > 3 or 6 < 1 or 1 > 3) #True
print(1 > 3 or 3 > 6) #False
逻辑非运算:Ture ==> False; False ==>Ture(取相反)
print(not(5 < 1)) #True
print(not(6 > 1)) #False
4. 逻辑运算符的短路
逻辑与的短路,只要检索到有False就输出False,后面的不会继续检索,取第一个False的值
5 > 3 and print('hello') #True 继续检索
8 < 2 and print('weiwei') #False 不会继续执行下一个
逻辑或的短路,只要检索到有True就输出True,后面的不会继续检索,取第一个为True
6 > 2 or print('123') #True,不会继续执行下一个
9 < 1 or print('456') #False 继续检索
逻辑与运算做取值时,取第一个为False;如果所以运算数都是True,取最后一个值
print(1 and 4 and 'hello' and 'test') #test
print(4 and 7 and 0 and '' and '123') #0
逻辑或运算做取值时,取第一个为True;如果所以运算数都是False,取最后一个值
print(0 or 'hello' or '' or []) #hello
print(0 or [] or '' or None or ()) # ()
5. 位运算符
按位与 & 按位或| 按位异或^ 按位左移<< 按位右移>> 按位取反~
a = 42
b = 13
# 按位与& 是把整型转换成二进制进行运算,两个二进制同为1则为1,否则为0,进行运算的结果
# 42 = 0b101010 0010 1010 ==>
# 13 = 0b1101 0000 1101 ==>0000 1000 ==> 0b1000 = 8
print(a & b)
按位或| 只有一个为1就为1
# 00101111 ==> 47
print(a | b)
按位异或^ 相同为0,不同为1
# 00100111 ==> 39
print(a ^ b)
按位左移 << 转换成二进制在尾部加0,即头部向前移n位
# 101 ==> 101000
x = 5
print(x << 3) # x << n ==> a * 2 ** n ==> a*2的n次方
按位右移 >> 转换成二进制在头部加0,即尾部向后移n位,溢出的数要丢弃(也就是丢弃尾部二进制的n位数)
# 10001 ==> 100
x = 17
print(x >> 2) # x >> n ==> a 除以2的n次方
按位取反~ 把数据每个二进制位进行取反,即把1变成0,0变成1,涉及补码和反码有点绕,以后补习
https://www.cnblogs.com/jniantic/p/12189648.html
# 0101 ==> 010
x = 6
print(~6) #~x = -(x+1)
用位运算符拆分十六进制各两位出来
x = 0xF0384E
R = x >> 16 #右移16位把后面16位溢出
G = x >> 8 & 255 # 255 为 1111 1111,然后与运算把前面的8位去除
B = x & 255 # 同上,把前面16位去除
print(hex(R),hex(G),hex(B))
6. 运算符的优先级
#逻辑运算符的优先级 not > and > or
#先加减后乘除
#()括号内是最高优先级的
# ** 比乘除高
# ~ + - (正负号) 高
print(True or False and True) #True
print(True and not False or False) #True
7. 三元表达式
#3. 三元表达式(if...else语句的简写),将if...else转变成一行代码
num1 = 12
num2 = 42
# if num1 < num2:
# x = num2
# else:
# x = num1
x = num1 if num1 > num2 else num2 # a if 1 > 2 else b,意思是如果1>2成立 则输出a否则输出b
print(x,'这数大')