我想使用一种抽象的方法来判断变量是否为整数.我知道我能做到:

>>> a = 1
>>> isinstance(a, int)

True

但是,这对某些特殊类型的整数不起作用,例如:

>>> import numpy as np
>>> b = np.int64(1)
>>> isinstance(b, int)

False

我知道我还可以做到:

>>> isinstance(b, np.integer)

True

但不幸的是,np.integer还不够"抽象",无法与普通的int相提并论:

>>> isinstance(a, np.integer)

False

我如何才能判断并得出结论,ab都是"整数",最好也匹配NumPy以外的其他程序包可能带来的其他"精神上的整数"特殊数据类型?

推荐答案

>>>
>>> import numbers
>>> import numpy as np
>>>
>>>
>>> def is_integer(value):
...   return isinstance(value, numbers.Integral)
...
>>> a = 1
>>> print(is_integer(a))
True
>>>
>>> b = np.int64(1)
>>>
>>> print(is_integer(b))
True
>>> c = np.int32(1)
>>> print(is_integer(c))
True
>>> d = 1.5
>>> print(is_integer(d))
False
>>>

要判断变量是整数还是任何类似整数的对象,可以使用Python中的Numbers模块,它为数值类型提供了抽象基类的层次 struct .Numbers模块中的整型抽象基类表示整型.

Python相关问答推荐

如何从同一类的多个元素中抓取数据?

Python中的锁定类和线程以实现dict移动

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

在Python中,如何才能/应该使用decorator 来实现函数多态性?

Django文件上传不起作用:文件未出现在媒体目录或数据库中

除了Python之外,可以替代bare?

KNN分类器中的GridSearchCV

Python主进程和分支进程如何共享gc信息?

使文本输入中的文本与标签中的文本相同

Pandas 除以一列中出现的每个值

如何根据条件在多指标框架上进行groupby

列表上值总和最多为K(以O(log n))的最大元素数

更改matplotlib彩色条的字体并勾选标签?

使用miniconda创建环境的问题

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

当独立的网络调用不应该互相阻塞时,'

基于索引值的Pandas DataFrame条件填充

在pandas中使用group_by,但有条件

判断solve_ivp中的事件

重置PD帧中的值