广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2021-08(2)

2021-09(9)

Python 运算符及其优先级总结大全(新手必收藏)

发布于2022-06-24 21:11     阅读(513)     评论(1)     点赞(4)     收藏(5)



        众所周知,在Python运算符是非常重要的一部分,没有它们我们就不能写出栩栩如生的程序,那么它们具体有哪些类别呢?分别又有什么作用呢?优先级的情况优势怎样的呢?今天博主就带你走近Python运算符

        Python里的运算符主要有算术运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符这七类。下面就让我来为大家细细地讲解吧!


目录

一、算术运算符

二、比较运算符

三、赋值运算符

四、位运算符

五、逻辑运算符

六、成员运算符

七、身份运算符

八、运算符优先级

九、特别注意


一、算术运算符

算术运算符就是我们平常所说的加减乘除,但是Python里的算术运算符不仅仅只有这四个,还有取余运算整除运算乘方(幂)运算

名称符号描述简单示例备注
加法运算+求两个数的和或者用于连接字符串、列表等
  1. print(1+2)#3
  2. print([1]+[2])#[1,2]
  3. print('1'+'2')#'12'
减法运算-求两个数的差或者两个集合的差集等
  1. print(3-2)#1
  2. print({1,2}-{2})#{1}
乘法运算*求两个数的积或者用于创建重复字符串、列表等
  1. print(1*2)#2
  2. print([1]*2)#[1,1]
  3. print('1'*2)#'11'
除法运算/求两个数的商
print(3/2)#1.5
【1】除不尽时默认保留16位小数,无论是否除尽,结果为浮点数
乘方运算**求一个数的某次方
print(2**3)#8
【2】2**0.5代表sqrt(2)
整除运算//整除,舍去余数
print(3//2)#1
【3】向下取整(不是向零)
取余运算%求两个数相除后的余数
print(5%2)#1
【4】向下取余,结果取绝对值

【1】print(1/3)的输出结果为0.3333333333333333print(2/1)的输出结果为2.0

【2】2**0.5的意思是20.5次方,就是二次根号下2math模块里面表示为sqrt(2)

【3】print(-3//2)的输出结果为-2向下取整),而不是-1向零取整

【4】print(-2.5%2)的输出结果为1.5,其计算过程为向下取余得到-1.5取绝对值得到1.5


二、比较运算符

比较运算符,顾名思义,就是用来比较两个对象的,一般用在循环语句中的循环终止判断条件或者在if-elif-else语句中,返回值是一个【1】布尔值

符号描述简单示例备注
>>=判断一个对象是否大于(等于)另一个对象
print(1>2)#False
<<=判断一个对象是否小于(等于)另一个对象
print(1<=2)#True
==判断两个对象是否相同
print(1==1.0)#True
【2】判断两个对象的值在一定范围内是否相同
!=判断两个对象是否不同
print(1!=1.0)#False

【1】有些时候返回值TrueFalse会被视为10,如print([1,2][1>2])的输出结果为1

【2】在一定范围内,整型与浮点型值相同用==去比较会输出True,但当值比较大的时候会输出False,这是由浮点数不准确导致的,print(1e+23 == 100000000000000000000000)输出的结果为False(顺便一提,科学计数法表示的是浮点数),print(1==1.0)输出True


三、赋值运算符

赋值运算符是给一个变量进行赋值时使用的,【1】赋值的方式有很多种,而且在Python3.8版本中还新增加了一种运算符——海象运算符。为什么叫它海象运算符呢?因为它横起来看就像一只海象的眼睛和长长的牙齿。

名称符号描述备注
简单赋值运算符=简单地定义一个变量并赋值
加法赋值运算符+=a += b 等价于 a = a + b        这七个赋值运算符与其等价式子相比,它们属于原地运算,它们的运算都是在自己原本的数值上进行计算和修改的,不会消耗额外的内存。而其等价式的实质是(以加法赋值运算符为例)先计算a+b并给其分配一个存储空间,然后再赋值给a,这样做会消耗额外且不必要的存储空间和运算时间。所以更加推荐使用赋值运算符!
减法赋值运算符-=a -= b 等价于 a = a - b
乘法赋值运算符*=a *= b 等价于 a = a * b
除法赋值运算符/=a /= b 等价于 a = a / b
乘方赋值运算符**=a **= b 等价于 a = a ** b
整除赋值运算符//=a //= b 等价于 a = a // b
取余赋值运算符%=a %= b 等价于 a = a % b
海象运算符:=

a := 1 等价于声明定义a并赋值

【2】可以简化代码,提高效率

【1】赋值运算符还可以与位运算结合,即&=、|=、^=、~=、>>=、<<=

【2】下面的两段代码等价,但是上面的代码效率更高,代码量也更少!

if a:=1 : print('Yes')#'Yes'
  1. a = 1
  2. if a : print('Yes')#'Yes'

四、位运算符

位运算符或许听起来很神秘,看起来或许很难理解,其实吧,只要静下心来细细研读,还是可以弄明白的。位运算也没什么特定,就两点,一是比较难懂,二是运算速度快!为什么位运算符的名字这么奇怪嘞?‘位’是个什么意思呢?位运算是对数字的一种的运算,其本质是将十进制数字转化为二进制数字进行操作,这里涉及计算机的原理了,所以位运算非常快。所谓的‘位’就是二进制01数字串中01的位置的变化,具体看下表。

名称符号描述简单示例备注
按位与运算符&二进制数字相应位置都为1则为1,否则为0
print(2&3)#2
两个数字进行操作
按位或运算符|二进制数字相应位置都为0则为0,否则为1
print(2|3)#3
按位异或运算符^二进制数字相应位置不同则为1,否则为0
print(2^3)#1
按位取反运算符~

【1】二进制数字相应位置01,10,即~n=-n-1

相反数减一

print(~2)#-3
单个数字进行操作
左移运算符<<

二进制数字各位置左移,即n<<m=n*2**m

乘以2的m次方

print(2<<2)#8
右移运算符>>

二进制数字各位置右移,即n>>m=n//(2**m)

除以2的n次方后向下取整

print(2>>2)#0

【1】具体解释请参考这篇博客:Python学习中的“按位取反”笔记总结 - 逝水经年 - 博客园

【这里添加一些详细示例,供大家理解】

  1. a = 25 #二进制为 0001 1001
  2. b = 36 #二进制为 0010 0100
  3. print(a&b) #0
  4. #按位与运算 ==> 0000 0000 (0的二进制)
  5. print(a|b) #61
  6. #按位或运算 ==> 0011 1101 (61的二进制)
  7. print(a^b) #61
  8. #按位异或运算 ==> 0011 1101 (61的二进制)
  9. print(a<<2) #100
  10. #左移运算 ==> 0110 0100 (100的二进制)
  11. print(a>>2) #6
  12. #右移运算 ==> 0000 0110 (6的二进制)
  13. print(~a) #-26
  14. #按位取反运算 ==> 1 0001 1010 (-26的二进制)
  15. print(~-a) #24
  16. #按位取反运算 ==> 0 0001 1000 ( 24的二进制)
  17. #注:最左边单独的一位数字是符号位,1为负,0为正

五、逻辑运算符

逻辑运算符与我们在数学里面学的‘且’‘或’‘非’十分类似,【1】返回值一般为布尔值。

名称符号描述备注
布尔与and同时为True则返回True,否则返回False对两个对象进行操作
布尔或or同时为False则返回False,否则返回True
布尔非not若为True则返回False,若为False则返回True【2】对单个对象(或者一个整体)进行操作

【1】当操作对象是具体的数字的时候返回值是具体的数,and若第一个数判断为False则返回第一个数,否则为第二个数(无论第二个数的TrueFalse),or若第一个数判断为True则返回第一个数,否则为第二个数(无论第二个数的TrueFalse)如print(1 and 0)输出结果为0

【2】print(not(1 and 0))的输出结果为True(1 and 0)是用括号括起来了,算是一个整体


六、成员运算符

所谓成员运算符,就是判断一个元素是否在一个【1】序列中。

符号描述简单示例备注
in如果该元素在序列中就返回True,否则返回False
print('1' in '123')#True
not in如果该元素在序列中就返回False,否则返回True
print('1' not in '123')#False
in 在 not 的后面

【1】这个序列可以是字符串列表元组字典集合数组等(对于字典是判断是否存在键)


七、身份运算符

身份运算符用于【1】比较两个对象的存储单元(是否引用自同一个对象),而不是简单地比较两个对象的类型或值!

符号描述简单示例备注
is判断两个对象的标识符是否引用自一个对象,若是就返回True,否则为Falsea is b 等价于 id(a) == id(b)
print(1 is 1.0)#False
is not判断两个对象的标识符是否引用自一个对象,若是就返回False,否则为Truea is not b 等价于 id(a) != id(b)
print([] is not [])#True
is 在 not 的前面

【1】print([] is [])输出False,因为创建两个列表,它们的存储单元是不一样的,但是对于元组,如果元组中包含的元素一样,它与列表不同,它将输出True,但是会有一个SyntaxWarning


八、运算符优先级

不同的运算符有不同的优先级,这就好比我们在数学中学到的,乘方运算的优先级大于乘除法,乘除法的优先级大于加减法,有括号的先算括号里的,这三点在Python的运算符优先级规则里也是相同的,但在这之外,Python运算符优先级规则里还有一些规则,毕竟Python的运算符的数量还不少,不过还是建议在优先级不清晰的时候打上括号,便于阅读和理解。

运算符类型类型内优先级
算术运算符乘方 > 取余、整除、乘法、除法 > 加法、减法
比较运算符各运算符优先级相同
赋值运算符各运算符优先级相同
位运算符按位取反 > 左移、右移、按位与、按位或、按位异或
逻辑运算符布尔非 > 布尔与 > 布尔或
成员运算符各运算符优先级相同
身份运算符各运算符优先级相同

总运算符优先级

(从高到低)

乘方>按位取反>取余、整除、乘法、除法>加法、减法>左移、右移、按位与、按位或、按位异或>比较运算符>赋值运算符>身份运算符>成员运算符>布尔非>布尔与>布尔或

九、特别注意

这里会指出一些需要我们特别注意的地方。

序号描述涉及运算符
1整除运算符(//)向下取整,而取整函数(int)向零取整整除运算符
2对于正数的取余与数学上的取余没有区别,但是对于负数,Python里取余后要取绝对值取余运算符
3布尔非运算符的输出结果永远是True或者False,不像布尔与运算符布尔或运算符布尔非
4字典与列表类似,创建时会新开辟一个内存空间身份运算符
5对于字典,成员运算符只会对字典的键进行判断成员运算符
6减法运算不能计算列表之差,但可以计算集合之差,因为集合里面没有重复元素减法运算

兄弟们啊!原创不易啊!原创不易啊!各位点个赞收个藏分个享再走呗!

原文链接:https://blog.csdn.net/weixin_62651706/article/details/122073646







所属网站分类: 技术文章 > 博客

作者:

链接:https://www.pythonheidong.com/blog/article/1604802/4f644ffbb811e7f87b35/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏
  • #1楼    2022-06-28 22:00:53    wm01886 回复

    看看看看

评论内容:(最多支持255个字符)