2017-08-27 120 views
4

看來,float.is_integer是唯一的「is」方法,它在Python中的內置類型中有一個下劃線。 Examples that don't包括下劃線:str.isalnumstr.isalphastr.isdecimalstr.isdigitstr.isidentifierstr.islowerstr.isnumericstr.isprintablestr.isspacestr.istitlestr.isupper爲什麼`float.is_integer`中的下劃線,而不是`str.isnumeric`中的下劃線?

任何線索爲什麼?

通過PEP 8,我希望所有這些名稱都包含下劃線。但實用性勝過純度(PEP 20),所以在常用短名稱中省略下劃線是有道理的。然而,這兩種命名慣例似乎都是向後兼容的結果(以logging模塊作爲典型例子)。

+2

也許是因爲'float.is_integer'是PEP8建立後很久以前的一個新增加(2.6)? 'str' apis可能從一開始就存在,並且由於兼容性原因沒有改變(儘管它可能在3)。 'float.fromhex'也可能被重命名,我相信在整個標準類型中會有更多的案例可以找到。 –

回答

2

一個similar question已被要求對Python的bug跟蹤系統:

比較isinstanceissubclassisloweris_integeris_fifois_enabled。在Python 3.6中,標準庫中以is開頭的所有名稱中,我使用下劃線計算了69個名稱,沒有91個名稱。選擇一種方式或另一種方式似乎更好,並堅持下去。我會建議使用下劃線,以便易讀。

而答案(由R.大衛穆雷,一個Python核心開發者)有:

是的,這將是很好的。但是隨着時間的推移,Python已經發展了,我們必須保持向後兼容性。名字就是他們的名字。

鑑於問題中的數字,它似乎是is_integer並不是唯一帶下劃線的方法。