【发布时间】:2019-04-06 11:02:58
【问题描述】:
在PEP 754的拒绝通知中声明:
此 PEP 已被拒绝。开业四年后, 未能引起足够的社区兴趣。
这个 PEP 的几个想法是在 Python 2.6 中实现的。 float('inf') 和 repr(float('inf')) 现在保证可以工作 每个支持的平台都具有 IEEE 754 语义。但是,那 eval(repr(float('inf'))) 往返仍然不受支持,除非您 自己定义 inf 和 nan:
>>> inf = float('inf') >>> inf, 1E400 (inf, inf) >>> neginf = float('-inf') >>> neginf, -1E400 (-inf, -inf) >>> nan = float('nan') >>> nan, inf * 0. (nan, nan)
这似乎是说Python中没有对Inf,NaN和-Inf的原生支持,并且提供的示例是准确的!但是,它是不必要的冗长:
$ python2.7
>>> 1e400
inf
>>> 1e400 * 0
nan
>>> -1e400 * 0
nan
>>> -1e400
-inf
$ python3
>>> 1e400
inf
>>> 1e400 * 0
nan
>>> -1e400 * 0
nan
>>> -1e400
-inf
这些是数字 1 * 10 ^ 400 的规范表示。默认情况下,语法中不存在名称 inf 和 nan,但如果它们存在于表示中,则为什么不是 inf 和 nan 关键字?
我不是在问为什么 PEP 被拒绝,因为那是基于意见的。
【问题讨论】:
-
Python 中有very few keywords。例如,
float不是关键字。当然float比inf更普遍有用。那么为什么应该inf是关键字? -
@Robᵩ
float和int恰好是既是类型又是函数的内置函数;他们很特别。如果存在,为什么不nan? -
因为人们很少使用
inf和nan,所以他们不保证成为关键字的状态? -
@Nayuki 这是一个很好的观点,我猜 Python 没有过多的关键字 cough Perl 6
-
事后添加关键字很难;有人可能会使用您建议的关键字作为变量名,而这种更改会破坏他们的代码。定义一个很少有人关心的常数值得冒险吗?