python运算符
| python运算符 | 注意点 |
| ------------ | ------------------------------------------------------------ |
| 算数运算符 | % 取余 , //地板除 , ** 幂运算 |
| 比较运算符 | == 比较两个值是否相等 != 比较两个值是否不同 |
| 赋值运算符 | a += 1 => a = a+1 |
| 成员运算符 | in 或 not in 判断某个值是否包含在(或不在)一个容器类型数据当中 |
| 身份运算符 | is 和 is not 用来判断内存地址是否相同 |
| 逻辑运算符 | 优先级 () > not > and > or |
| 位运算符 | 优先级 (<<或 >> ) > & > ^ > \| 5 << 1 结果:10 , 5 >> 1 结果:2 |
(1)算数运算符: + - * / // % **
# 算数运算符: + - * / // % **
var1 = 10
var2 = 5
# +
res = var1 + var2
print(res)
# -
res = var1 - var2
print(res)
# *
res = var1 * var2
print(res)
# / (结果永远是小数)
res = var1 / var2
print(res)
# // 地板除 10 除以 5 10被除数,5是除数,得到值是商 (默认得到的是整数)
res = var1 // var2
print(res)
# 被除数或除数是一个小数,结果就是小数
res = 10 // 5.0
res = 14 // 8
print(res)
# % 取余
res = 17 % 3 # 2
res = 11 % 7 # 4
res = -11 % 7 # 3 => -4 + 7 = 3
res = 11 % -7 # -3 => 4 + (-7) = -3
res = -11 % -7# -4 => -4
# res = 81 % 5 # 1
res = -81 % 5 # 4
res = 81 % -5 # -4
res = -81 % -5 # -1
print(res)
# ** 幂运算
res = 2 ** 50
print(res)
(2)比较运算符: > < >= <= == !=
# 比较运算符: > < >= <= == != 结果只有两种 (True 真的 False 假的)
res = 5 > 6
res = 6 < 1000
res = 90 <= 90
print(res)
# == 等于
"""一个等号是赋值操作,两个等号在做比较操作"""
res = 100 == 100
print(res)
# != 不等于
res = 100 != 100
print(res)
(3)赋值运算符: = += -= *= /= //= %= **=
# 赋值运算符 = += -= *= /= //= %= **=
# =
var1 = 10
var2 = 20
var1 = var2
print(var1,var2)
# +=
var1 = 10
var2 = 20
# var1 = var1 + var2
var1 += var2
# var1 = var1 + 1
var1 += 1
print(var1)
# -=
var1 = 5
var2 = 10
# var1 = var1 - var2
var1 -= var2
print(var1)
# %=
var1 = 7
var2 = 4
# var1 = var1 % var2
var1 %= var2
print(var1)
(4)成员运算符: in 和 not in (针对于容器型数据)
# 成员运算符: in 和 not in (针对于容器型数据)
# 针对于字符串
"""要求字符串是一个连续的片段"""
strvar = "好看的皮囊千篇一律,有趣的灵魂200多斤"
res = "皮" in strvar
res = "千篇一律" in strvar
res = "灵多" in strvar
print(res)
# 针对于 list tuple set
listvar = ["john","大江东去","繁星","dosir"]
res = "大江东去" in listvar
tuplevar = ("john","大江东去","繁星","dosir")
res = "dosir" not in tuplevar
setvar = {"john","大江东去","繁星","dosir"}
res = "john1234" not in setvar
print(res)
# 针对于字典 dict
"""针对于字典中的键来进行判定"""
dictvar = {"fx":"聪明","xx":"美丽","stone":"风流倜傥","fei":"睿智"}
res = "美丽" in dictvar
res = "xx" in dictvar
res = "abc" not in dictvar
print(res)
(5)身份运算符: is 和 is not (检测两个数据在内存当中是否是同一个值)
# 身份运算符: is 和 is not (检测两个数据在内存当中是否是同一个值)
# 整型 -5 ~ 正无穷
var1 = 100
var2 = 100
res = var1 is var2
print(res)
# 浮点型 非负数范围内
var1 = -9.13
var2 = -9.13
res = var1 is var2
print(res)
# 容器类型数据,除了空元组和相同的字符串,剩下所有的容器类型数据id地址都不相同
var1 = ()
var2 = ()
var1 = [1,2]
var2 = [1,2]
res = var1 is not var2
print(res)
(6)逻辑运算符: and or not
# 逻辑运算符: 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)
# 逻辑短路
print("<=============>")
"""
短路: 后面代码不执行
(1)True or print("我就是我,不一样的烟火") [在单个表达式或者多个表达式中,可以直接判断短路]
(2)False and print("烟花一样的灿烂,是我逝去的青春") [只能在单个表达式当中判断是否短路]
# 不发生短路
True and print("仙女一样的姑娘,是我渴望已久的愿望")
"""
res = 5 or 6
res = 5 and 6
res = not 5
# 逻辑优先级
"""从高到低排列: () > not > and > or"""
res = 5 or 6 and 7 # 5 or 7 => 5
res = 0 and 6 or 7 # 0 or 7 => 7
res = not 5 or 6 and 7 # False or 6 and 7 => False or 7 => 7
res = not (5 or 6) and 7 # not 5 and 7 => False and 7 => False
res = 1>2 and 3<4 or 5>6 and 7<8 and 100>99
"""
False and True or False and True and True
False or False and True
False or False
False
"""
print(res,"<===标注===>")
res = False and False # 返回的是第一个False
res = False or False # 返回的是第二个False
res = False and "闻哥,你为什么这么帅气,我已经爱上了你"
res = False or "闻哥,你为什么这么帅气,我已经爱上了你"
res = "闻哥哥,我爱你爱的受不了了" or True
res = "闻哥哥,我爱你爱的受不了了" and True
print(res)
"""
额外解答:
res = 100 or 200
res = 0 or 200
res = ‘‘ or 200
print(res)
例子:False or ? = 多少呢?
False or True => True
False or False => False
False or 200 => 200
"""
(7)位运算符: & | ~ ^ << >>
# 位运算符 & | ^ << >> ~
# 按位与 &
var1 = 19
var2 = 15
res = var1 & var2
print(res)
"""
先把19转换成二进制
10011
在把15转换成二进制
01111
结果
00011
把结果在转换成十进制 => 3
"""
# 按位或 |
var1 = 19
var2 = 15
res = var1 | var2
print(res)
"""
10011
01111
11111
11111 => 十进制31
"""
# 按位异或 ^ (两个值不一样,返回真1,两个值一样,返回假0)
var1 = 19
var2 = 15
res = var1 ^ var2
print(res)
"""
10011
01111
11100
"""
# << 左移 (做乘法 乘以2的n次幂)
res = 5 << 1
print(res)
"""
000101
向左边移动一位
001010
向左边移动二位
010100 => 20
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 => 7
"""
# >> 右移 (做除法 除以2的n次幂)
res = 20 >> 2
print(res)
"""
10100
向右边移动一位
01010 => 10
向右边移动二位
00101 => 5
"""
# ~ 按位非 -(n+1)
res = ~3
res = ~(-17)
res = ~0
print(res)
# ~19 => -20
# ~18 => -19
# ~17 => -18
# ~(-19) => 18
# ~(-18) => 17
# ~(-17) => 16
# ### 运算符总结:
"""
优先级最高的符号是 ** 幂运算
优先级最低的符号是 = 赋值运算符
整体来说: 一元运算符 > 二元运算符 优先级
一元运算符 : 同一时间,只操作一个数字的就是一元 ( ~ , - )
二元运算符 : 同一时间,只操作两个数字的就是二元 ( + - * / ..)
逻辑运算符: () > not > and > or
位运算符 : (<< >>) > & > ^ > |
算数运算符: 先算乘除,再算加减
算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
赋值运算符做收尾,等所有运算结束之后,赋值给等号左侧;
算位比身成逻
赋值运算做收尾
"""
res = 5+5 << 6 // 3 is 40 and False
"""
10 << 2 is 40 and False
40 is 40 and False
True and False
False
"""
print(res) # False
# 通过() 提升运算的优先级
res = (5 + 5) << (6 // 3) is 40 and False
原文:https://www.cnblogs.com/liunaixu/p/12419743.html