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

2024-04-19 02:56:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在Java中,数字类型都是从数字派生的,因此我将使用

(x instanceof Number).

python的等价物是什么?


Tags: 类型number数字javainstanceof
3条回答

测试变量是否为^{}的实例:

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

这将使用ABCs,并将适用于所有内置的类,也适用于所有第三方类(如果它们值盐的话)(注册为NumberABC的子类)。

然而,在许多情况下,您不必担心手动检查类型——Python是duck typed,并且混合一些兼容的类型通常可以工作,但是当某些操作没有意义时(4 - "1"),它会显示一条错误消息,因此很少真正需要手动检查。这只是奖金。您可以在完成模块时添加它,以避免用实现细节困扰其他人。

这是可行的starting with Python 2.6。在旧版本中,您几乎仅限于检查一些硬编码类型。

Python2: isinstance(x, (int, long, float, complex)) and not isinstance(x, bool)

Python3: isinstance(x, (int, float, complex)) and not isinstance(x, bool)

使用numbers模块中的Number来测试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

当然,这与duck类型相反。如果您更关心一个对象的行为方式,而不是它是什么,那么像有一个数字一样执行操作,并使用异常来告诉您其他情况。

相关问题 更多 >