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

cat*_*cat 4 python ieee-754

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

该PEP已被拒绝.在开放四年后,它未能产生足够的社区兴趣.

为Python 2.6实现了这个PEP的几个想法.现在可以保证float('inf')和repr(float('inf'))可以在IEEE 754语义的每个支持平台上运行.但是,除非您自己定义inf和nan,否则仍然不支持eval(repr(float('inf')))往返:

>>> inf = float('inf')
>>> inf, 1E400
(inf, inf)
>>> neginf = float('-inf')
>>> neginf, -1E400
(-inf, -inf)
>>> nan = float('nan')
>>> nan, inf * 0.
(nan, nan)
Run Code Online (Sandbox Code Playgroud)

这似乎表明在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
Run Code Online (Sandbox Code Playgroud)

这些都是典型的数量1*10 ^ 400名陈述infnan在默认情况下,语法不存在,但如果他们在那里的表现,那么为什么不infnan关键字?

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

pp_*_*pp_ 6

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

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

import math

print(math.inf)
print(-math.inf)
print(math.nan)
Run Code Online (Sandbox Code Playgroud)

输出:

inf
-inf
nan
Run Code Online (Sandbox Code Playgroud)

  • 定义"本机支持".`repr`调用返回的值不一定对Python有任何特殊的内部含义.例如,`"nan"`是在repr完成执行之前不久通过普通[strcopy调用](https://github.com/python/cpython/blob/513f40a9abfc00b7de1f36eb780c2cf47169cf2a/Python/pystrtod.c#L832)创建的. (4认同)