除非我瘋了if None not in x
和if not None in x
是等效的。是否有首選版本?我猜None not in
更英文,因此更pythonic,但not None in
是更像其他語言的語法。是否有首選版本?「無不在」vs「」無無「
6
A
回答
14
他們編譯到相同的字節碼,所以是的,它們是等價的。
>>> import dis
>>> dis.dis(lambda: None not in x)
1 0 LOAD_CONST 0 (None)
3 LOAD_GLOBAL 1 (x)
6 COMPARE_OP 7 (not in)
9 RETURN_VALUE
>>> dis.dis(lambda: not None in x)
1 0 LOAD_CONST 0 (None)
3 LOAD_GLOBAL 1 (x)
6 COMPARE_OP 7 (not in)
9 RETURN_VALUE
的documentation也清楚地表明,兩者是等價的:
x not in s
返回x in s
否定。
正如你所說的None not in x
是更自然的英語,所以我更喜歡使用它。
如果你寫not y in x
可能不清楚你的意思是not (y in x)
還是(not y) in x
。如果您使用not in
,則沒有歧義。
+0
謝謝,不知道您可以將字節碼這個。 – 2010-08-30 21:55:52
7
表達
not (None in x)
(括號中加入爲了清楚)是用普通的布爾否定。然而,
None not in x
添加更多可讀的代碼特殊的語法(這裏有沒有可能,也沒有任何意義,使用和,或等在前面)。如果添加了這個特殊情況,請使用它。
同樣適用於
foo is not None
與
not foo is None
我找到了 「不」 更加清晰易讀。作爲額外的好處,如果表達式是更大的布爾表達式的一部分,則not的範圍立即清除。
+0
提及範圍+1 – Falmarri 2010-08-30 21:31:41
相關問題
- 1. 無法在VS
- 2. 無法在VS
- 3. golang的無效vs無?
- 4. system.dllnotfoundexception無VS 2008
- 5. 無法從VS
- 6. 無vs空白在JavaScript中
- 7. 無法在2015年VS
- 8. 無法在2017年VS
- 9. 無法在VS 2008中的
- 10. 無vs列表(無)與遞歸
- 11. 無極VS的setTimeout
- 12. 無法在2015年VS VS也不2017年
- 13. VS 2015無法啓動
- 14. 無法呈現LocalReport vs 2010
- 15. 地圖vs無序地圖
- 16. VS無法找到NuGet包
- 17. document.URL vs location.href>無結果
- 18. CSS Visiblity無vs崩潰
- 19. 無法安裝VS 2013 Ultimate
- 20. C#:XNA vs無XNA(性能)
- 21. 瞭解無主VS弱IBoutlets
- 22. 無法安裝vs 2013 express
- 23. VS無法加載VSPerfControl.Interop
- 24. 無START條款與VS. N =
- 25. 概述:無VS概述:0
- 26. 無法在VS 2012上運行SpecFlow
- 27. SSIS包在VS 2008中無法加載
- 28. 無法在VS 2010中使用FAXCOMEXLib?
- 29. 無法在VS找到「Microsoft.Net.Http」包2013
- 30. 無法編譯.ts到.js在Vs - windows
另請參見http://stackoverflow.com/questions/2710940 – Gumbo 2010-08-30 21:20:10
如果您只是將1個操作符更改爲另一個操作符,則很多SO上的問題將會是重複的 – Falmarri 2010-08-30 23:50:20