给定一个任意 python 对象,确定它是否是数字的最佳方法是什么?这里的 is
被定义为 在某些情况下就像一个数字
。
例如,假设您正在编写一个矢量类。如果给定另一个向量,您想要找到点积。如果给定一个标量,您希望缩放整个向量。
检查某些东西是否是 int
、float
、long
、bool
很烦人,并且不包括用户-定义的对象可能像数字一样。但是,例如,检查 __mul__
还不够好,因为我刚刚描述的向量类将定义 __mul__
,但它不会是我所说的那种数字想要。
最佳答案
使用 Number
来自 numbers
用于测试 isinstance(n, Number)
的模块(自 2.6 起可用)。
>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2, 0), Fraction(2, 1), '2']:
... print(f'{n!r:>14} {isinstance(n, Number)}')
2 True
2.0 True
Decimal('2.0') True
(2+0j) True
Fraction(2, 1) True
'2' False
当然,这与鸭式打字相反。如果您更关心对象的作用而不是它是什么,请像有一个数字一样执行您的操作,并使用异常来告诉您其他情况。
关于python - 检查对象是否为数字的最pythonic方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441358/