Evet - kullanın 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'ten önce kullanılabilir float("nan")
(büyük / küçük harfe duyarlı değildir).
NaN olan iki şeyin birbirine eşit olup olmadığını kontrol etmenin her zaman yanlış döndüreceğini unutmayın. Bunun nedeni kısmen "sayı olmayan" iki şeyin birbirine eşit olduğunun söylenemeyeceğidir (kesinlikle) - bkz . IEEE754 NaN değerleri için yanlış döndüren tüm karşılaştırmaların mantığı nedir? daha fazla ayrıntı ve bilgi için.
Bunun yerine, math.isnan(...)
bir değerin NaN olup olmadığını belirlemeniz gerekiyorsa kullanın.
Ayrıca, ==
NaN değerindeki işlemin tam anlam bilgisi , NaN'yi list
veya gibi kap türleri içinde depolamaya çalışırken dict
(veya özel kap türleri kullanılırken) ince sorunlara neden olabilir . Daha fazla ayrıntı için Kapta NaN varlığını kontrol etme konusuna bakın .
Python'un ondalık modülünü kullanarak NaN sayıları da oluşturabilirsiniz :
>>> 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 nesnelerle de çalışacaktır.
Ancak, olamaz Python'un içinde NaN numaraları inşa kesirler modülü:
>>> 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.
Bu arada, siz de yapabilirsiniz float('Inf')
, Decimal('Inf')
veya math.inf
(3.5+) sonsuz numaraları atamak için. (Ve ayrıca bakınız math.isinf(...)
)
Ancak yapmak Fraction('Inf')
ya Fraction(float('inf'))
da izin verilmez ve tıpkı NaN gibi bir istisna atar.
Bir sayının NaN ya da sonsuz olmadığını kontrol etmenin hızlı ve kolay bir yolunu istiyorsanız math.isfinite(...)
, Python 3.2+ ile birlikte kullanabilirsiniz.
Karmaşık sayılarla benzer kontroller yapmak istiyorsanız, cmath
modül , modüle benzer bir dizi işlev ve sabit içerir math
: