2017-08-27 124 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并不是唯一带下划线的方法。