當檢查方法的參數,看看它們是否設置,是Python的做一個身份檢查:通過標識或布爾運算的參數存在檢查?
def doThis(arg1, arg2=None):
if arg2 is None:
arg2 = myClass()
或者是適當的形式使用短路布爾:
def doThis(arg1, arg2=None):
arg2 = arg2 or myClass()
在支持前者,PEP 8狀態:
比較,以單身像無應始終做到用是或 是不,從來沒有平等的經營者。另外,如果x的實際意思是x不是無 - 例如x 測試 默認爲None的變量或參數是否設置爲某個其他 值。另一個值可能有一個類型(例如容器),在布爾上下文中 可能爲false!
在另一方面,從Google style guide:
使用,如果在所有可能的 「隱性」 錯誤。 ...
但與此同時美國...
不要使用==或!=比較單身像無。使用是或不是。
這是否適用於「無」,因爲它總是評估爲False,並且/或者是一個等同於== /!=的布爾比較?
編輯: 要回答的最後一個問題,「或」似乎並不等同於「==」引擎蓋下:
In [17]: timeit.timeit("1 or None", number=100000000)
Out[17]: 2.0310521125793457
In [18]: timeit.timeit("1 is None", number=100000000)
Out[18]: 2.618263006210327
In [19]: timeit.timeit("1 == None", number=100000000)
Out[19]: 4.554893970489502