检查对象是否为数字的最Python方法是什么?
问题内容:
给定一个任意的python对象,确定它是否为数字的最佳方法是什么?这里is
定义为acts like a number in certain circumstances
。
例如,假设您正在编写向量类。如果给定另一个向量,则要查找点积。如果给出标量,则要缩放整个矢量。
检查,如果事情是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
当然,这与鸭子的打字相反。如果你更关心的对象如何 行为 ,而不是它什么 是 ,执行您的操作,如果你有一个号码,使用异常,否则告诉你。