运算符
-
算数运算符: + - * / // % **
-
/ 除法(结果永远是小数)
res = 8 / 4 print(res) # 2.0
-
// 地板除
被除数 ÷ 除数 = 商 是整数的时候会舍去小数部分 res = 13 // 3 如果被除数或者除数是小数,结果就是小数.在正常得到结果后带上.0 res = 13.0 // 3 print(res)
-
% 取余
(1)3+(-4) = -1 (2)-3+4 = 1 (3)被除数和除数都是负数,结果直接取负 res = 7 % 4 # 3 res = 7 % -4 # -1 res = -7 % 4 # 1 res = -7 % -4 # -3 res = 81 % 7 # 4 res = -81 % 7 # 3 -4+7 = 3 res = 81 % -7 # -3 4+-7=-3 res = -81 % -7 # -4 print(res)
-
** 次方
res = 3 ** 4 print(res) #81
-
-
比较运算符: > < >= <= == !=
比较运算符最后的结果只有True或者False res = 4 > 3 res = 4 == 3 res = 4 != 3 print(res)
-
赋值运算符 = += -= *= /= //= %= **=
-
成员运算符: in 和 not in (针对于容器型数据)
特指容器 in 在..里面 str 必须是连续的片段 strvar = "5月26日,晚上7点有血月" res = "晚" in strvar # True res = "晚上" in strvar # True res = "晚上血月" in strvar # False print(res) lst = ["王海洋","石啸","张猛","董银银","雷亮"] tup = ("王海洋","石啸","张猛","董银银","雷亮") setvar = {"王海洋","石啸","张猛","董银银","雷亮"} res = "雷亮" not in lst # False res = "董银银" in tup # True res = "石啸啸啸" in setvar # False print(res)
-
dict :in 或者是 not in 用来判断字典的键,不是值
dic = {"why":"王海洋","sx":"石啸","dyy":"董银银","ll":"雷亮"} res = "王海洋" in dic # Flase res = "why" in dic # True print(res)
-
身份运算符 is / is not (判断地址)
-
整型而言 -5 ~ 正无穷
var1 = 200 var2 = 200 res = var1 is var2 print(res) # true
-
浮点型 非负数
var1 = -90 var2 = -90 res = var1 is var2 print(res) # True
-
布尔型 相同即可
var1 = True var2 = False res = var1 is not var2 print(res)
-
复数 :实数+虚数 永不相同 (只有虚数情况下)
var1 = 3+4j var2 = 3+4j res = var1 is not var2 print(res)
-
容器 : 相同的字符串 相同的空元组 地址相等
var1 = "你好" var2 = "你好" print(var1 is var2) # True var1 = () var2 = () print(var1 is var2) 剩下的容器,地址都不一样 var1 = [1,2,3] var2 = [1,2,3] print(var1 is not var2) # True res = 5 == 5 #比较值的大小 res = 5 is 5 #比较值的地址
-
-
逻辑运算符
-
逻辑与 and
全真则真 一假则假 res = True and True # True res = True and False # False res = False and True # False res = False and False # False print(res)
-
逻辑或 or
一真则真 全假则假 res = True or True # True res = True or False # True res = False or True # True res = False or False # False print(res)
-
逻辑非 not
真变假 假变真 res = not True res = not False print(res)
-
短路现象
-
True or 表达式
True or print(123) 无论后面的表达式是什么,改变不了最后的结果,于是短路 True or True => True True or False => True
-
False and 表达式
False and print(456) 无论后面的表达式是什么,改变不了最后的结果,于是短路 False and False => False False and True => False res = 5 or 6 # 5 res = 5 and 6 # 6 res = 0 and 7 # 0 res = 0 or 6 # 6 res = not 0 # true res = not 1 # flase print(res)
执行过程: 1.先脑补5的布尔值是真还是假 2.是否出现了短路现象 3.如果是短路现象,返回前者 如果不是短路现象,返回后者
-
-
逻辑运算符的优先级 () > not > and > or
res = 5 or 6 and 7 print(res) res = 5 or 7 # 先算and = 7 res = 5
res = 5 and 6 or 7 print(res) # res = 6 or 7 res = 6
res = (5 or 6) and 7 print(res) res = 5 and 7 res = 7
res = not (5 or 6) and 7 print(res) res = not 5 and 7 res = False and 7 res = False
res = 1>2 and 3<4 or 5>7 and 5<1 or 1>2 and 34>89 print(res) res = False and True or False and False or False and False res = False or False or False res = False or False res = Flase
位运算符: & | ~ ^ << >>
var1 = 19 # 10011 二进制 var2 = 15 # 1111
-
& 按位与 用在二进制上
res = var1 & var2 print(res) # 3 10011 01111 00011
-
-
| 按位或
res = var1 | var2 print(res) 10011 01111 11111
-
^ 按位异或
当两个值不一样时, 返回真 res = var1 ^ var2 print(res) 真 ^ 假 = 真 假 ^ 真 = 真 真 ^ 真 = 假 假 ^ 假 = 假 10011 01111 11100
-
<< 左移
结论 : 任意数 << n => 任意数 * # 2的n次幂 res = 5 << 1 # 10 res = 5 << 2 # 20 res = 5 << 3 # 40 print(res) 000 ... 101 101是5的二进制 000 ...1010 移动一位 10 000 ..10100 移动二位 20 000 .101000 移动三位 40
-
右移<<
结论 : 任意数 >> n => 任意数 # 2的n次幂 res = 5 >> 1 res = 5 >> 2 res = 5 >> 3 print(res) 000 ... 101 000 ... 010 移动一位 2 000 ... 001 移动二位 1 000 ... 000 移动三位 0
-
~ 按位非(了解)
公式: -(n+1) res = ~-19 # 18 res = ~-40 # 39 print(res) 按位非: ~ 对补码进行按位取反(每一位都取反) 反码: 除了第一个符号位,剩下每一位取反;
19 原码:000 ... 10011 反码:000 ... 10011 补码:000 ... 10011 补码:000 ... 10011 按位非:111 ... 01100 给你补码 求 原码 补码:111 ... 01100 反码:100 ... 10011 原码:100 ... 10100 => -20 -19 原码:100 ... 10011 反码:111 ... 01100 补码:111 ... 01101 对补码运算 补码:111 ... 01101 按位非:000 ... 10010 给你补码 求 原码 补码:000 ... 10010 反码:000 ... 10010 原码:000 ... 10010 => 18
-
运算符总结:
运算符优先级最高的: **
运算符优先级最低的: =-
整体来看: 一元运算符 > 二元运算符
一元运算符: 同一时间,操作一个数字 (-19 , ~19)
二运运算符: 同一时间,操作二个数字 (+ - * / …) 3+5-
具体来看:
算数运算符: 先算乘除 再算加减
逻辑运算符: () > not > and > or
位运算符 : (<< , >> ) > & > ^ > |-
分布来看:
算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
赋值运算符用来收尾res = 5+5<<10//5 is 40 or True and False print(res) res = 10 << 2 is 40 or True and False res = 40 is 40 or True and False res = True or True and False res = True or False res = True # 套上括号 res = (5+5) << (10//5) is 40 or True and False
-