协慌网

登录 贡献 社区

检查变量是否为整数

如何检查变量是否为整数?

答案

如果你需要这样做,那就做吧

isinstance(<var>, int)

除非您在 Python 2.x 中,否则您需要

isinstance(<var>, (int, long))

不要使用type 。它几乎从来都不是 Python 中的正确答案,因为它阻止了多态性的所有灵活性。例如,如果你继承int ,你的新类应该注册为int ,哪种type不会:

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

这符合 Python 强大的多态性:你应该允许任何行为类似于int对象,而不是强制它是一个。

然而,经典的 Python 心态是, 请求宽恕比获得更容易 。换句话说,不要检查x是否是整数; 假设它是并且如果不是,则捕获异常结果:

try:
    x += 1
except TypeError:
    ...

这种心态正在慢慢地被抽象基类的使用所取代,它允许你准确地注册你的对象应该具有哪些属性(添加?倍增?倍增?),使它继承自特殊构造的类。这将是最好的解决方案,因为它将准确地允许那些具有必要和充分属性的对象,但是您必须阅读有关如何使用它的文档。

到目前为止,所有提出的答案似乎都错过了一个事实:double(python 中的浮点数实际上是双精度数)也可以是一个整数(如果它在小数点后面没有任何内容)。我在双打上使用内置的is_integer()方法来检查这个。

示例(在 for 循环中每隔 x 次执行一次操作):

for index in range(y): 
    # do something
    if (index/x.).is_integer():
        # do something special

编辑:

在调用此方法之前,您始终可以转换为浮点数。三种可能性:

>>> float(5).is_integer()
True
>>> float(5.1).is_integer()
False
>>> float(5.0).is_integer()
True

否则,你可以像 Agostino 一样检查它是否是一个 int:

def is_int(val):
    if type(val) == int:
        return True
    else:
        if val.is_integer():
            return True
        else:
            return False

如果你真的需要检查那么最好使用抽象基类而不是具体类。对于一个整数,意味着:

>>> import numbers
>>> isinstance(3, numbers.Integral)
True

这不会将检查限制为仅仅int ,或仅限于intlong ,而且还允许其他用户定义的类型作为整数运行。