检查变量是否为整数但

2022-09-05 01:07:46

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


答案 1

如果需要执行此操作,请执行

isinstance(<var>, int)

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

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

请勿使用 。在Python中,它几乎从来都不是正确的答案,因为它阻碍了多态性的所有灵活性。例如,如果您子类 ,您的新类应注册为 ,这将不会执行以下操作:typeintinttype

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

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

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

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

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


答案 2

到目前为止,所有提出的答案似乎都忽略了一个事实,即双精度(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