1. 运算符

2. 比较运算符

大于 > 小于 < 大于等于 >= 小于等于 <= 不等于 != <>(也是不等于但python3.7不支持了) == 等于

判断结果输出是布尔值

  1. print(2 > 1) #True
  2. print(3 < 2) #False
  3. print(2 >= 2) #True
  4. print(2 <= 1) #False
  5. print(1 != 2) #True
  6. print('hello' == 'hello') #True
  1. #比较符在字符串中使用
  2. #字符串之间使用比较运算符,会根据各个字符逐一编码值(ASCII码表)比较
  3. print('a' > 'b') #False 97 > 98
  4. print('abc' > 'a') #False 97 > 98 逐一对比False就不往下
  5. #字符串和数字不能进行比较,与等于做运算结果为False,与不等于做运算为True,不支持其他的比较运算
  1. # print('a' > 90 )
  2. print('a' == 90) #False
  3. print('a' != 90) #True

3. 逻辑运算符

逻辑与 and(并且) 逻辑或or(或者) 逻辑非not

逻辑与规则:只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True(找第一个False)

  1. print(5 > 3 and 6 < 8 and 1 < 7) #True
  2. print(3 > 1 and 9 < 5 and 2 < 3) #False

逻辑或规则:只要有一个运算是True,结果就是True;只有所有的运算数都是False,结果才是False(找第一个True)

  1. print(5 > 3 or 6 < 1 or 1 > 3) #True
  2. print(1 > 3 or 3 > 6) #False

逻辑非运算:Ture ==> False; False ==>Ture(取相反)

  1. print(not(5 < 1)) #True
  2. print(not(6 > 1)) #False

4. 逻辑运算符的短路

逻辑与的短路,只要检索到有False就输出False,后面的不会继续检索,取第一个False的值

  1. 5 > 3 and print('hello') #True 继续检索
  2. 8 < 2 and print('weiwei') #False 不会继续执行下一个

逻辑或的短路,只要检索到有True就输出True,后面的不会继续检索,取第一个为True

  1. 6 > 2 or print('123') #True,不会继续执行下一个
  2. 9 < 1 or print('456') #False 继续检索

逻辑与运算做取值时,取第一个为False;如果所以运算数都是True,取最后一个值

  1. print(1 and 4 and 'hello' and 'test') #test
  2. print(4 and 7 and 0 and '' and '123') #0

逻辑或运算做取值时,取第一个为True;如果所以运算数都是False,取最后一个值

  1. print(0 or 'hello' or '' or []) #hello
  2. print(0 or [] or '' or None or ()) # ()

5. 位运算符

按位与 & 按位或| 按位异或^ 按位左移<< 按位右移>> 按位取反~

  1. a = 42
  2. b = 13
  3. # 按位与& 是把整型转换成二进制进行运算,两个二进制同为1则为1,否则为0,进行运算的结果
  4. # 42 = 0b101010 0010 1010 ==>
  5. # 13 = 0b1101 0000 1101 ==>0000 1000 ==> 0b1000 = 8
  6. print(a & b)

按位或| 只有一个为1就为1

  1. # 00101111 ==> 47
  2. print(a | b)

按位异或^ 相同为0,不同为1

  1. # 00100111 ==> 39
  2. print(a ^ b)

按位左移 << 转换成二进制在尾部加0,即头部向前移n位

  1. # 101 ==> 101000
  2. x = 5
  3. print(x << 3) # x << n ==> a * 2 ** n ==> a*2的n次方

按位右移 >> 转换成二进制在头部加0,即尾部向后移n位,溢出的数要丢弃(也就是丢弃尾部二进制的n位数)

  1. # 10001 ==> 100
  2. x = 17
  3. print(x >> 2) # x >> n ==> a 除以2的n次方

按位取反~ 把数据每个二进制位进行取反,即把1变成0,0变成1,涉及补码和反码有点绕,以后补习

https://www.cnblogs.com/jniantic/p/12189648.html

  1. # 0101 ==> 010
  2. x = 6
  3. print(~6) #~x = -(x+1)

用位运算符拆分十六进制各两位出来

  1. x = 0xF0384E
  2. R = x >> 16 #右移16位把后面16位溢出
  3. G = x >> 8 & 255 # 255 为 1111 1111,然后与运算把前面的8位去除
  4. B = x & 255 # 同上,把前面16位去除
  5. print(hex(R),hex(G),hex(B))

6. 运算符的优先级

  1. #逻辑运算符的优先级 not > and > or
  2. #先加减后乘除
  3. #()括号内是最高优先级的
  4. # ** 比乘除高
  5. # ~ + - (正负号) 高
  6. print(True or False and True) #True
  7. print(True and not False or False) #True

7. 三元表达式

  1. #3. 三元表达式(if...else语句的简写),将if...else转变成一行代码
  2. num1 = 12
  3. num2 = 42
  4. # if num1 < num2:
  5. # x = num2
  6. # else:
  7. # x = num1
  8. x = num1 if num1 > num2 else num2 # a if 1 > 2 else b,意思是如果1>2成立 则输出a否则输出b
  9. print(x,'这数大')