为什么Python中没有Inf,-Inf和NaN关键字?

时间:2016-02-25 16:54:30

标签: python ieee-754

PEP 754的拒绝通知中,它声明:

  

此PEP已被拒绝。经过四年的开放,它有   未能产生足够的社区兴趣。

     

为Python 2.6实现了这个PEP的几个想法。   浮动(' inf')和repr(浮动(' 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的规范表示。默认情况下,语法中不存在名称infnan,但如果它们在那里在表示中,为什么不是infnan关键字?

我不是在问为什么PEP被拒绝,因为这是基于意见的。

2 个答案:

答案 0 :(得分:6)

我的猜测是没有人想要不必要地混淆命名空间。

如果你想做数学,你仍然可以这样做:

import math

print(math.inf)
print(-math.inf)
print(math.nan)

输出:

inf
-inf
nan

答案 1 :(得分:-2)

您可以使用

float('inf')

np.nan