python运算符
一 判断类型 isinstance
语法一
isinstance(要判断的数据,要判断的类型)
如果该数据是这个类型,返回True,反之返回False
res = isinstance(111,int)
res = isinstance([],tuple)
语法二
isinstance(要判断的数据,(类型1,类型2,类型3))
如果该数据在后面的类型元组中,返回True,反之返回False
res = isinstance('你好',(int,float,bool,tuple,str))
res = isinstance({'a','b','c'},(int ,float,list,tuple ,str) )
print(res)
二 .运算符
1.1算数运算符
var1 = 3 var2 = 5 res = var1 + var2 print(res) # - var1 = 3 var2 = 5 res = var1 - var2 print(res) # * var1 = 3 var2 = 5 res = var1 * var2 print(res) # / 结果一定是小数 var1 = 3 var2 = 5 res = var1 / var2 res = 6 / 2 print(res) # // 地板除 """被除数 ÷ 除数 = 商""" res = 6 // 2 res = 7 // 100 """如果被除数或者除数身上有小数,在得到正常结果之后,加上.0""" res = 7.0 // 3 print(res) # % 取余 """ 先正常算出余数,如果被除数身上有符号,那么该余数身上补负号和除数相加 如果被除数或者除数身上都有符号,直接算出余数,然后前面套上负号即可; """ res = 7 % 4 res = -7 % 4 # -3 + 4 = 1 res = 7 % -4 # 3 + (-4) = -1 res = -7 % -4 # -3 res = -91 % 8 # -3 + 8 = 5 res = 91 % -8 # 3 + (-8) = -5 res = -91 % -8# -3 print(res) # ** 幂运算 res = 3 ** 40 print(res)
1.2比较运算符
"""比较运算符只能得到两个结果,要么是True,要么是False""" res = 5 > 3 # True res = 6 <= 6 # True res = 6 == 7 # False res = 6 != 7 # True #注意点 : == 符号 if 5 == 5: # 5 = 5 errror print(1)
1.3 身份运算符 is 和 is not(检测链各个数据在内存当中是否是同一地址)
# 1.Number类型 # 整型 -5~正无穷 var1 = 15 var2 = 15 print(id(var1),id(var2)) print(var1 is var2) # 浮点型 非负数 var1 = 4.5 var2 = 4.5 print(var1 is var2) # 复数 (实数+虚数 永不相同,只有虚数的情况下例外) var1 = 4 + 90j var2 = 4 + 90j print(var1 is not var2) print(4j is 4j) # 布尔型 var1 = True var2 = False print(var1 is not var2) # 2.容器类型 # str 和 空元祖 在值相同的情况下,地址相同 var1 = "你" var2 = "你" var1 = (1,) var2 = (1,) print(var1 is var2) # 剩下的容器永不相同 var1 = [1,2] var2 = [1,2] print(var1 is var2)
1.4 逻辑运算符: and or not
#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)
什么是逻辑短路
两种形式:
(1) True or 表达式
(2) Fasle and 表达式
无论后面的表达式是什么,都无法改变最后的结果,会出现逻辑短路
True or True => True
True or False => True
1.5 赋值运算符 = += -= *= /= //= %= **=
var1 = 10 var1 = 10 !=10 # += var1 = 4 var2 = 6 """var1 = var1 + var2""" var1 += var2 print(var1) # -= var1 = 4 var2 = 6 """var1 = var1 - var2""" var1 -= var2 print(var1) # *= var1 = 100 var2 = 3 """var1 = var1 * var2""" var1 *= var2 print(var1 , var2)
1.6 成员运算符: in 和 not in (针对于容器类型)
# 字符串 """必须是连续的片段""" strvar = '瘦成闪电,胖成坚果' res = '闪电' in strvar res = '瘦胖' in strvar print(res) # 列表,元组,集合 lst = ['更这事','既迎合','孙翔宇'] res = '张银' in lst tup = ('万胜府','像欧诺个话','梁瑞奇怪') res = '万胜府' not in tup setvar = {'刘玉播','黄建昌','放进孙'} res = '放进孙' not in setvar # 字典 """in或者not in 在字典中,判断的是键,不是值""" dic = {'hxr':'小黄人','hlz':'回落至'} res = '小换人' in dic res = 's1' in dic res = 's1' not in dic print(res)
三. 位运算符
1.按位与&
var1 = 19 var2 = 15 print(var1 & var2) """ 19的二进制 0000 ... 10011 15的二进制 0000 ... 01111 0000 ... 10011 0000 ... 01111 0000 ... 00011 => 3 """
2. 按位或 |
var1 = 19 var2 = 15 print(var1 | var2) """ 19的二进制 0000 ... 10011 15的二进制 0000 ... 01111 0000 ... 10011 0000 ... 01111 0000 ... 11111 => 31 """
3.按位异或^ 两个值不一样,返回真,否则返回假
""" 1 0 => 1 1 1 => 0 0 0 => 0 0 1 => 1 """ var1 = 19 var2 = 15 print(var1 ^ var2) """ 19的二进制 0000 ... 10011 15的二进制 0000 ... 01111 0000 ... 10011 0000 ... 01111 0000 ... 11100 => 28 """
4. <<左移
""" 左移相当于做乘法 : 5 * 2的n次幂 """ res = 5 << 1 # 10 res = 5 << 2 # 20 res = 5 << 3 # 40 print(res) """ 0000 ... 101 0000 ... 1010 移动一位 10 0000 10100 移动二位 20 """
5.>>右移
""" 右移相当于做除法 : 5 // 2的n次幂 """ res = 5 >> 1 # 2 res = 5 >> 2 # 1 res = 5 >> 3 # 0 print(res) """ 0000 ... 101 0000 ... 010 移动一位 2 0000 ... 001 移动二位 1 0000 ... 000 移动三位 0 """
6. ~按位非
"""公式: -(n+1)""" var1 = ~19 print(var1) """ ~ 按位非每一位都取反,包括符号位,求反码每一位除了符号位,都取反. 原码:0000 ... 10011 反码:0000 ... 10011 补码:0000 ... 10011 补码: 0000 ... 10011 按位非: 1111 ... 01100 给你补码求原码: 补码: 1111 ... 01100 反码: 1000 ... 10011 原码: 1000 ... 10100 => -20 """ var1 = ~(-22) print(var1) """ 原码: 1000 ... 10011 反码: 1111 ... 01100 补码: 1111 ... 01101 补码: 1111 ... 01101 按位非: 0000 ... 10010 给你补码求原码: 正数 : 补码 = 反码 = 原码 原码: 0000 ... 10010 => 18 """
7. 运算符总结
1 """ 2 (1) 个别运算符: 3 优先级最高 ** 幂运算 4 优先级最低 = 赋值运算符 5 () 括号可以提升运算优先级 6 7 (2) 整体 一元运算符 > 二元运算符 8 一元运算符: 同一时间,只操作一个值 - ~ 9 二元运算符: 同一时间,操作两个值 + - * / ... 10 11 (3) 同一层级 12 逻辑: () > not > and > or 13 算数: 乘除 > 加减 14 位运算符: ( << >> ) > & > ^ > | 15 16 (4) 其他运算符 17 算数运算符 > 位运算符 > 比较运算符 > 身份运算符> 成员运算符 > 逻辑运算符 18 赋值运算符是最后算完进行赋值,做收尾工作的. 19 """ 20 res = 5+5 << 6//3 is 40 and True 21 print(res) 22 23 """ 24 res = 10 << 2 is 40 and True 25 res = 40 is 40 and True 26 res = True and True 27 res = True 28 """ 29 # 加上括号包起来,让别人能看懂代码; 30 res = (5+5) << (6//3) is 40 and True