簡體   English   中英

在if語句中檢查0的Pythonic方法?

[英]Pythonic way of checking for 0 in if statement?

在編寫素數測試器時,我遇到了一個有趣的想法。 當你想要做一些事情,如果一個操作的結果是0 ,這是更好的('pythonic')解決它的方式?

# option A - comparison
if a % b == 0:
    print('a is divisible by b')

# option B - is operator
if a % b is 0:
    print('a is divisible by b')

# option C - boolean not
if not a % b:
    print('a is divisible by b')

PEP 8表示,應該使用is運算符來比較像None這樣的單例。 它還說檢查空序列應該使用not ,而不是將布爾值與==is進行比較。 但是,它沒有提到任何關於檢查0的結果。

那么我應該使用哪個選項?

針對0測試是(imo)最好通過針對0進行測試來完成。 這也表明可能存在除01之外的其他值。

如果被調用的函數實際上只在成功時返回01則未能說Yes/NoSuccess/FailureTrue/False等,那么我認為函數是問題,應該(如果適用)修復為返回True而是False

只是個人:我更喜歡not a % b方式,因為它似乎具有高度的可讀性。 但是現在,為了降低代碼中的混淆程度,我將使用== 0 ,因為它表達了您希望以更准確的方式准確測試的內容。 這是“關心調試”的方法。

0不保證是單例,所以不要使用is來測試它:當前C Python重用小整數所以如果你還在Python 2上,那么可能只有一個值為0加上long int .x,以及任何數量的浮點零,更不用說False,它們都比較等於0.一些早期版本的Python,在得到一個單獨的bool類型之前,對比較結果使用了不同的int 0。

使用== (這將是我的偏好)或只是not喜歡,無論你喜歡什么。

A和C都是有效且非常pythonic。

B不是,因為

  1. 0語義上不是單例(它在cPython中,但這是一個實現細節)。
  2. 它不適用於浮動ab
  3. 實際上,這可能不適用於Python的其他一些實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM