如何确定Python对象是数字?

Viv*_*edt 1 python

确定Python对象是否为数字的最佳方法是什么?我正在使用以下测试

type(o) in [int, long, float, complex]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有另一种方式.

vau*_*tah 8

首选方法是使用numbers.Number,即

数字层次结构的根.如果你只是想检查一个参数x是一个数字,而不关心什么类型,请使用isinstance(x,Number)

如下所示

In [1]: import numbers

In [2]: isinstance(1, numbers.Number)
Out[2]: True

In [3]: isinstance(1.0, numbers.Number)
Out[3]: True

In [4]: isinstance(1j, numbers.Number)
Out[4]: True
Run Code Online (Sandbox Code Playgroud)

另外,type(o) in [int, long, float, complex]可以改写为

isinstance(o, (int, long, float, complex))
Run Code Online (Sandbox Code Playgroud)

使它更健壮,因为能够检测int,long,floatcomplex的子类.

  • 当然`isinstance(o,numbers.Number)`通常优于`isinstance(o,(int,long,float,complex))`因为它意味着声称是某种数字的任何对象都会通过测试. (2认同)