ใช่ - 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 เท่ากันหรือไม่จะส่งกลับเท็จเสมอ ส่วนหนึ่งเป็นเพราะสองสิ่งที่ "ไม่ใช่ตัวเลข" ไม่สามารถพูดได้ (พูดอย่างเคร่งครัด) ว่าเท่าเทียมกัน - ดูเหตุผลสำหรับการเปรียบเทียบทั้งหมดที่คืนค่าเป็นเท็จสำหรับค่า IEEE754 NaN คืออะไร? สำหรับรายละเอียดและข้อมูลเพิ่มเติม
ให้ใช้math.isnan(...)
หากคุณต้องการพิจารณาว่าค่าเป็น NaN หรือไม่
นอกจากนี้ความหมายที่แน่นอนของการ==
ดำเนินการกับค่า NaN อาจทำให้เกิดปัญหาเล็กน้อยเมื่อพยายามจัดเก็บ NaN ไว้ในประเภทคอนเทนเนอร์เช่นlist
หรือdict
(หรือเมื่อใช้ประเภทคอนเทนเนอร์ที่กำหนดเอง) ดูการตรวจสอบสถานะ NaN ในคอนเทนเนอร์สำหรับรายละเอียดเพิ่มเติม
คุณยังสามารถสร้างตัวเลข NaN โดยใช้โมดูลทศนิยมของ 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(...)
จะทำงานกับวัตถุทศนิยม
อย่างไรก็ตามคุณไม่สามารถสร้างตัวเลข NaN ในโมดูลเศษส่วนของ 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.
อนึ่งนอกจากนี้คุณยังสามารถทำfloat('Inf')
, Decimal('Inf')
หรือmath.inf
(3.5 ขึ้นไป) เพื่อกำหนดหมายเลขอนันต์ (และดูด้วยmath.isinf(...)
)
อย่างไรก็ตามการทำFraction('Inf')
หรือFraction(float('inf'))
ไม่ได้รับอนุญาตและจะทำให้เกิดข้อยกเว้นเช่นเดียวกับ NaN
หากคุณต้องการวิธีที่ง่ายและรวดเร็วในการตรวจสอบว่าตัวเลขนั้นไม่ใช่ทั้ง NaN หรือไม่มีที่สิ้นสุดคุณสามารถใช้math.isfinite(...)
เป็น Python 3.2+ ได้
หากคุณต้องการทำการตรวจสอบที่คล้ายกันกับจำนวนเชิงซ้อนcmath
โมดูลจะมีชุดฟังก์ชันและค่าคงที่ที่คล้ายกันเป็นmath
โมดูล: