python3.x - Python not 運算符的問題
問題描述
>>> a = False + 55
>>> a = not(1) + 5False
如上,將 False 直接進行運算時會作為 0 來計算。使用邏輯運算符 not 時,not(1) 的值為 False 或 0。
但為什么直接將 not(1) 放進算術(shù)運算后再次計算的結(jié)果為 False?這和 Python 的算法邏輯有關(guān)么?
問題解答
回答1:因為not不是一個函數(shù), 是一個表達式, 不管你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 運算符的用法Boolean Operations:
not x
if x is false, then True, else False
此外,+運算符的優(yōu)先級(precedence)高于not運算符,所以not(1) + 5中先計算(1) + 5, 后面的(1)+5作為not運算符的操作數(shù). 舉個例子可以看到:
not(-1) # Falsenot(-1) + 1 # True回答3:
正如上面所說,因為 not operator 的優(yōu)先級小于 + 所以 not(1)+6 會被翻譯為 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. mac OSX10.12.4 (16E195)下Mysql 5.7.18找不到配置文件my.cnf2. mysql - 怎么生成這個sql表?3. mysql儲存json錯誤4. php - 公眾號文章底部的小程序二維碼如何統(tǒng)計?5. mysql - 表名稱前綴到底有啥用?6. mysql - 數(shù)據(jù)庫表中,兩個表互為外鍵參考如何解決7. Navicat for mysql 中以json格式儲存的數(shù)據(jù)存在大量反斜杠,如何去除?8. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語法實現(xiàn)存在即更新應(yīng)該使用哪個標簽?9. mysql - 數(shù)據(jù)庫建字段,默認值空和empty string有什么區(qū)別 11010. sql語句 - 如何在mysql中批量添加用戶?
