python3.x - Python not 運(yùn)算符的問(wèn)題
問(wèn)題描述
>>> a = False + 55
>>> a = not(1) + 5False
如上,將 False 直接進(jìn)行運(yùn)算時(shí)會(huì)作為 0 來(lái)計(jì)算。使用邏輯運(yùn)算符 not 時(shí),not(1) 的值為 False 或 0。
但為什么直接將 not(1) 放進(jìn)算術(shù)運(yùn)算后再次計(jì)算的結(jié)果為 False?這和 Python 的算法邏輯有關(guān)么?
問(wèn)題解答
回答1:因?yàn)閚ot不是一個(gè)函數(shù), 是一個(gè)表達(dá)式, 不管你not(1)+5 還是 not (1+5), 它的作用也只是將后面的結(jié)果取反而已.例如:
>>> not 1 + 2False>>> not (1 + 2)False>>> not (1 + 2) + 1False>>> (not (1 + 2)) + 11回答2:
Python 中 not 運(yùn)算符的用法Boolean Operations:
not x
if x is false, then True, else False
此外,+運(yùn)算符的優(yōu)先級(jí)(precedence)高于not運(yùn)算符,所以not(1) + 5中先計(jì)算(1) + 5, 后面的(1)+5作為not運(yùn)算符的操作數(shù). 舉個(gè)例子可以看到:
not(-1) # Falsenot(-1) + 1 # True回答3:
正如上面所說(shuō),因?yàn)?not operator 的優(yōu)先級(jí)小于 + 所以 not(1)+6 會(huì)被翻譯為 not (1)+5關(guān)于這些情況,你完全可以通過(guò) dis模塊 來(lái)查看具體的過(guò)程。>>> import dis>>> dis.dis('a = False + 5') 1 0 LOAD_CONST 3 (5) 3 STORE_NAME 0 (a) 6 LOAD_CONST 2 (None) 9 RETURN_VALUE>>> dis.dis('a = not(1) + 5') 1 0 LOAD_CONST 3 (6) 3 UNARY_NOT 4 STORE_NAME 0 (a) 7 LOAD_CONST 2 (None) 10 RETURN_VALUE
相關(guān)文章:
1. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?2. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?3. 微信小程序session無(wú)法緩存的問(wèn)題4. 怎么用 css3實(shí)現(xiàn)波浪底紋效果?5. vue.js - 關(guān)于Vue-cli項(xiàng)目在VPS中用Nginx部署完請(qǐng)求頁(yè)面app.js找不到提示404錯(cuò)誤。6. docker 17.03 怎么配置 registry mirror ?7. html - 這種錯(cuò)位的時(shí)間軸怎么布局,然后用css實(shí)現(xiàn)?8. 基于Nginx的Wordpress安裝失敗?9. css3 - 何時(shí)需要 flex-basis: 100% ?10. mysqld無(wú)法關(guān)閉
