Có - sử dụng math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Trước Python 3.5, người ta có thể sử dụng float("nan")
(phân biệt chữ hoa chữ thường).
Lưu ý rằng việc kiểm tra xem liệu hai thứ có NaN bằng nhau hay không sẽ luôn trả về false. Điều này một phần là do hai thứ "không phải là số" không thể (nói một cách chính xác) là bằng nhau - hãy xem Cơ sở lý luận cho tất cả các so sánh trả về sai cho các giá trị IEEE754 NaN là gì? để biết thêm chi tiết và thông tin.
Thay vào đó, hãy sử dụng math.isnan(...)
nếu bạn cần xác định xem một giá trị có phải là NaN hay không.
Hơn nữa, ngữ nghĩa chính xác của ==
thao tác trên giá trị NaN có thể gây ra các vấn đề nhỏ khi cố gắng lưu trữ NaN bên trong các loại vùng chứa chẳng hạn như list
hoặc dict
(hoặc khi sử dụng các loại vùng chứa tùy chỉnh). Xem Kiểm tra sự hiện diện của NaN trong hộp đựng để biết thêm chi tiết.
Bạn cũng có thể tạo số NaN bằng mô-đun thập phân của Python :
>>> 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(...)
cũng sẽ hoạt động với các đối tượng Thập phân.
Tuy nhiên, bạn không thể tạo số NaN trong mô-đun phân số của Python :
>>> 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.
Ngẫu nhiên, bạn cũng có thể làm float('Inf')
, Decimal('Inf')
hoặc math.inf
(3.5+) để gán các số vô hạn. (Và cũng xem math.isinf(...)
)
Tuy nhiên, làm Fraction('Inf')
hoặc Fraction(float('inf'))
không được phép và sẽ đưa ra một ngoại lệ, giống như NaN.
Nếu bạn muốn một cách nhanh chóng và dễ dàng để kiểm tra xem một số không phải là NaN hay vô hạn, bạn có thể sử dụng math.isfinite(...)
Python 3.2+.
Nếu bạn muốn thực hiện các kiểm tra tương tự với số phức, cmath
mô-đun chứa một tập hợp các hàm và hằng số tương tự như math
mô-đun: