开发者学堂课程【Python入门 2020年版:运算符的优先级】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10257
运算符的优先级
内容介绍:
一、优先级简介
二、需要特殊记忆的运算符
三、逻辑运算符规则
一、优先级简介
(1)举例
print(10-2*3) 结果是4,有加减和乘除时应先算乘除再算加减。
print (10+2*3**2) 有幂运算时先算幂运算 数学写法是10+2×3^2,应先算3^2,得到9后再运算,结果是28,这些都涉及运算符的优先级问题,优先级非常重要。
(2)优先级
除了这些单纯的算术运算符加乘和幂外,还有大于、小于、大于等于、小于等于、不等于、等等于、and、or、not 等各种运算符(逻辑运算符、比较运算符,位运算符等)。
当它们混在一起时,优先级如下。
** 指数(最高优先级)
~+ - 按位翻转,一元加号和减号(最后两个的方法名为+@和-@)
* / % // 乘,除,取模和取整除
+ -加法减法
>><< 右移,左移运算符
& 位' AND
^ | 位运算符
<= <> >= 比较运算符
<> == != 等于运算符
=%=/= //=-=+=*=**= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not>and>or 逻辑运算符
这些优先级每个都是一层。
第一个最高优先级是指数运算,即幂运算。
第二个优先级 第一个符号波浪线是按位取反,是下一级的,涉及到复数的二进制,不做深入了解;第二三个符号是正负号,不是加减,也是一个一元运算符。
二、需要特殊记忆的运算符
(1)若从左往右运算
print(True or False and True):True or False 结果为 True, 原式转换为 True and True,于是结果为 True;
print(False or not False) not 即取反,not False 即 True,于是结果为 True;
print(True or True and False) True or True 结果为 True, 原式转换为 Ture and False,最终结果为 False。
(2)实际运算
实际运行上述三式后结果为 True, Ture,True. 第三例有优先级的问题须注意,逻辑运算的优先级是 not> and >or . 从左往右算,是错误的算法。
例一应先算 False and True,再算 True 与它的结果,即先算 and 再算 or.
例三应先算 True and False, 结果为 False, 再算 True or False, 结果为 True。加括号可以提高优先级,若给 True or True 加上括号,则优先运算括号内内容,原式转换为 True and False, 最终结果为 False.
(3)括号
在开发中强烈建议使用括号说明运算符的优先级。即使不影响结果按照逻辑加括号也可以方便阅读。
三、逻辑运算符规则
(1)逻辑与运算
只要有一个运算数是 False,结果就是 False; 只有所有的运算数都是 True, 结果才是 True.
短路:只要遇到了 False 就停止,不再继续执行。
取值:取第一个为 False, 如果所有的运算数都是 True,取最后一个运算数。
(2)逻辑或运算
只要有一个运算数是 True ,结果就是 True ;只有所有的运算数都是 False,结果才是 False.
短路:只要遇到了 True ,就停止,不再继续执行。
取值:取第一个为 True 的值,如果所有的运算数都是 False ,取最后一个运算数。