python3.x - Python not 運(yùn)算符的問題
問題描述
>>> a = False + 55
>>> a = not(1) + 5False
如上,將 False 直接進(jìn)行運(yùn)算時(shí)會(huì)作為 0 來計(jì)算。使用邏輯運(yùn)算符 not 時(shí),not(1) 的值為 False 或 0。
但為什么直接將 not(1) 放進(jìn)算術(shù)運(yùn)算后再次計(jì)算的結(jié)果為 False?這和 Python 的算法邏輯有關(guā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:
正如上面所說,因?yàn)?not operator 的優(yōu)先級(jí)小于 + 所以 not(1)+6 會(huì)被翻譯為 not (1)+5關(guān)于這些情況,你完全可以通過 dis模塊 來查看具體的過程。>>> 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. PC 手機(jī)兼容的 編輯器2. html5和Flash對(duì)抗是什么情況?3. php如何獲取訪問者路由器的mac地址4. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined5. python沒入門,請(qǐng)教一個(gè)問題6. 小程序怎么加外鏈,語句怎么寫!求救新手,開文檔沒發(fā)現(xiàn)7. git - 使用淘寶npm安裝hexo出現(xiàn)問題?8. javascript - vue-resource中如何設(shè)置全局的timeout?9. thinkPHP5中獲取數(shù)據(jù)庫(kù)數(shù)據(jù)后默認(rèn)選中下拉框的值,傳遞到后臺(tái)消失不見。有圖有代碼,希望有人幫忙10. 多選框?qū)戇M(jìn)數(shù)據(jù)庫(kù)怎么寫
