检查一个变量是否是一个整数

我如何检查一个变量是否是一个整数?


如果你需要这样做,那么

isinstance(<var>, int)

除非你在Python 2.x中,在这种情况下你需要

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

不要使用type 。 它几乎从来都不是Python中的正确答案,因为它阻止了多态的所有灵活性。 例如,如果你继承了int ,你的新类应该注册为一个int type ,这种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:
    ...

这种心态正在慢慢被使用抽象基类所超越,它使您能够通过从特殊构造的类继承来准确注册对象应具有的属性(添加“倍增”)。 这将是最好的解决方案,因为它将准确地允许那些具有必要和足够属性的对象,但是您必须阅读关于如何使用它的文档。


到目前为止,所有提出的答案都似乎忽略了一个事实,即双精度浮点数(实际上是双精度浮点数)也可以是一个整数(如果它在小数点后没有任何内容)。 我在双打上使用内建的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 ,但也允许其他用户定义的类型作为整数运行。

链接地址: http://www.djcxy.com/p/75511.html

上一篇: Checking whether a variable is an integer or not

下一篇: Modifying a Python class