Nea*_*rdt 187 python types numbers
在Java中,数字类型都来自Number,所以我会使用
(x instanceof Number).
Run Code Online (Sandbox Code Playgroud)
什么是python等价物?
小智 233
在最近的Python版本中(2.6+;在旧版本中,您几乎只限于检查一些硬编码类型),正确的方法是测试您的变量是否是以下实例numbers.Number:
>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]
Run Code Online (Sandbox Code Playgroud)
这使用了ABC,并且适用于所有内置数字类,也适用于所有第三方类,如果它们值得盐(注册为NumberABC的子类).但是,在许多情况下你不应该担心手动输入类型 - Python是鸭子类型并且混合稍微兼容的类型通常可以工作,但是当某些操作没有意义(4 - "1")时它会barf一条错误消息,所以手动检查这个很少真的需要.这只是奖励,您可以在完成此模块时添加它,以避免纠缠其他人的实现细节.
Mat*_*att 170
我认为这会奏效:
isinstance(x, (int, long, float, complex)) and not isinstance(x, bool)
Ste*_*ski 51
使用Number从numbers模块测试isinstance(n, Number)(因为2.6可用).
isinstance(n, numbers.Number)
Run Code Online (Sandbox Code Playgroud)
这里有各种数字和一个非数字:
>>> 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
Run Code Online (Sandbox Code Playgroud)
当然,这与鸭子打字相反.如果您更关心对象的行为而不是它的作用,请执行操作,就好像您有一个数字并使用异常来告诉您.