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. docker - 如何修改運(yùn)行中容器的配置2. dockerfile - [docker build image失敗- npm install]3. 在windows下安裝docker Toolbox 啟動(dòng)Docker Quickstart Terminal 失??!4. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?5. docker綁定了nginx端口 外部訪問(wèn)不到6. javascript - nodejs調(diào)用qiniu的第三方資源抓取,返回401 bad token,為什么7. 為什么我ping不通我的docker容器呢???8. angular.js - angular內(nèi)容過(guò)長(zhǎng)展開收起效果9. nignx - docker內(nèi)nginx 80端口被占用10. docker不顯示端口映射呢?
