python运算符的优先级原来是这样的
这算是一篇《避坑文章》
为什么叫避坑呢,起因是自己掉过很多人挖的坑,比如国内转来转去的东西,大多是你抄我我抄你,从最起头就有问题,抄下去问题或许更多;有些又是因为翻译的问题,或是因为翻译造成的理解问题;有些是细节问题,一点点不起眼的地方,就引起最终的错误;有些是版本更新的问题。
所以想来想去,有时间的时候就写写,希望有人能看到,避免走一些弯路,我的目的就达到了。
(自己挖的坑暂时就不提了。。。)
最近想折腾一下python,就从头开始看了看,因为这样一道问题:
if not 1 + 1 == y or x == 4 and 7 == 8:
当然涉及到了pythone运算符的优先级,有点不清楚python的运算优先级,就去查了一下。
结果发现,好几个地方的内容是这样的,我粘了一份过来(从高到低):
实际上,官方是这样的(从低到高):
lambda
Lambda expressionif
–else
Conditional expressionor
Boolean ORand
Boolean ANDnot
x
Boolean NOTin
,notin
,is
,isnot
,<
,<=
,>
,>=
,!=
,==
Comparisons, including membership tests and identity tests|
Bitwise OR^
Bitwise XOR&
Bitwise AND<<
,>>
Shifts+
,-
Addition and subtraction*
,@
,/
,//
,%
Multiplication, matrix multiplication, division, floor division, remainder[5]+x
,-x
,~x
Positive, negative, bitwise NOT**
Exponentiation[6]await
x
Await expressionx[index]
,x[index:index]
,x(arguments...)
,x.attribute
Subscription, slicing, call, attribute reference(expressions...)
,[expressions...]
,{key:value...}
,{expressions...}
Binding or tuple display, list display, dictionary display, set display来源:
https://docs.python.org/3/reference/expressions.html#operator-precedence
各位看官发现区别没有?
我第一时间发现的问题就是,与或非这3个运算,前面那个表格在列在同一等级,这明显与常理不符,所以我才去查了官方资料。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。