はい-使用しますmath.nan
。
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Python 3.5より前は、使用できましたfloat("nan")
(大文字と小文字は区別されません)。
NaNである2つのものが互いに等しいかどうかを確認すると、常にfalseが返されることに注意してください。これは、「数ではない」2つの要素が(厳密に言えば)互いに等しいとは言えないためです。IEEE754NaN値に対してfalseを返すすべての比較の根拠は何ですか?を参照してください。詳細と情報については。
代わりに、math.isnan(...)
値がNaNかどうかを判断する必要がある場合に使用します。
さらに、==
NaN値に対する操作の正確なセマンティクスは、list
or などのコンテナータイプ内にNaNを格納しようとする場合dict
(またはカスタムコンテナータイプを使用する場合)に、微妙な問題を引き起こす可能性があります。詳細については、コンテナ内のNaNの存在の確認を参照してください。
Pythonのdecimalモジュールを使用して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:\Python35\lib\fractions.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:\Python35\lib\fractions.py", line 130, in __new__
value = Fraction.from_float(numerator)
File "C:\Python35\lib\fractions.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
ます。