2015-06-04 30 views
1

當檢查方法的參數,看看它們是否設置,是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 

回答