是的-使用
math.nan。
>>> from math import nan>>> print(nan)nan>>> print(nan + 2)nan>>> nan == nanFalse>>> import math>>> math.isnan(nan)True
在Python 3.5之前,可以使用
float("nan")(不区分大小写)。
请注意,检查两个NaN是否彼此相等将始终返回false。部分原因是不能(严格地说)说两个不是数字的事物彼此相等-请参阅所有比较为IEEE754
NaN值返回false的基本原理是什么?了解更多详细信息。
相反,
math.isnan(...)如果需要确定某个值是否为NaN
,请使用。
此外,
==在尝试将NaN存储在诸如
list或
dict(或使用自定义容器类型)的容器类型中时,对NaN值进行 *** 作的确切语义可能会引起细微问题。有关更多详细信息,请参见检查容器中是否存在NaN。
您还可以使用Python的十进制模块构造NaN数字:
>>> from decimal import Decimal>>> b = Decimal('nan')>>> print(b)NaN>>> print(repr(b))Decimal('NaN')>>>>>> Decimal(float('nan'))Decimal('NaN')>>> >>> import math>>> math.isnan(b)True
math.isnan(...)也可以使用Decimal对象。
但是,您 不能
在Python的分数模块中构造NaN数字:
>>> from fractions import Fraction>>> Fraction('nan')Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:Python35libfractions.py", line 146, in __new__ numerator)ValueError: Invalid literal for Fraction: 'nan'>>>>>> Fraction(float('nan'))Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:Python35libfractions.py", line 130, in __new__ value = Fraction.from_float(numerator) File "C:Python35libfractions.py", line 214, in from_float raise ValueError("Cannot convert %r to %s." % (f, cls.__name__))ValueError: Cannot convert nan to Fraction.
顺便说一句,您也可以执行
float('Inf'),
Decimal('Inf')或
math.inf(3.5+)来分配无限数。(另请参阅
math.isinf(...))
但是,这样做
Fraction('Inf')或
Fraction(float('inf'))不允许这样做都会抛出异常,就像NaN一样。
如果您想使用一种快速简便的方法来检查数字既不是NaN也不是无限,则可以使用
math.isfinite(...)Python
3.2+以上版本。
如果要对复数进行类似的检查,则该
cmath模块包含与该模块相似的一组函数和常量
math:
cmath.isnan(...)
cmath.isinf(...)
cmath.isfinite(...)
(Python 3.2及更高版本)cmath.nan
(Python 3.6及更高版本;等效于complex(float('nan'), 0.0)
)cmath.nanj
(Python 3.6及更高版本;等效于complex(0.0, float('nan'))
)cmath.inf
(Python 3.6及更高版本;等效于complex(float('inf'), 0.0)
)cmath.infj
(Python 3.6及更高版本;等效于complex(0.0, float('inf'))
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)