如何检查我的python对象是否为数字?

时间:2010-11-15 17:35:38

标签: python types numbers

在Java中,数字类型都来自Number,所以我会使用

(x instanceof Number).

什么是python等价物?

6 个答案:

答案 0 :(得分:210)

在最近的Python版本中(2.6+;在旧版本中,你几乎只限于检查一些硬编码类型),正确的方法是测试你的变量是否是numbers.Number的实例:< / p>

>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]

这使用ABCs,适用于所有类似内置数字的类,也适用于所有第三方类,如果它们值得盐(注册为Number ABC的子类) 。但是,在许多情况下你不应该担心手动输入类型 - Python是鸭子类型并且混合稍微兼容的类型通常可以工作,但是当某些操作没有意义时它会调整错误消息(4 - "1") ,所以很少需要手动检查。这只是奖励,您可以在完成此模块时添加它,以避免纠缠其他人的实施细节。

答案 1 :(得分:158)

我认为这样可行:

isinstance(x, (int, long, float, complex))

答案 2 :(得分:49)

使用Number模块中的numbers来测试isinstance(n, Number)(自2.6以来可用)。

isinstance(n, numbers.Number)

这里有各种各样的数字和一个非数字:

>>> 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 '%15s %s' % (n.__repr__(), isinstance(n, Number))
              2 True
            2.0 True
 Decimal('2.0') True
         (2+0j) True
 Fraction(2, 1) True
            '2' False

这当然与鸭子打字相反。如果您更关心对象的行为而不是它是什么,请执行您的操作,就好像您有一个数字并使用异常来告诉您。

答案 3 :(得分:1)

当然可以使用isinstance,但请注意,这不是Python的工作方式。 Python是一种鸭子类型的语言。您不应该明确检查您的类型。如果传递的类型不正确,将引发TypeError

所以假设它是int。不要打扰检查。

答案 4 :(得分:0)

这不是python如何运作的。只是像使用数字一样使用它,如果有人通过了你不是数字的东西,那就失败了。传递正确类型是程序员的责任。

答案 5 :(得分:-11)

似乎有效

isinstance(TheNumber, (int,float, ...)