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


当前回答

你可以做到的。

if type(x) is int:

其他回答

你可以这样做:

name = 'Bob'
if type(name) == str:
    print 'this works'
else:
    print 'this does not work'

它会返回'this works'…但是如果你将name改为int(1),那么它将返回'this does not work',因为它现在是一个字符串… 你也可以试试:

name = int(5)
if type(name) == int:
    print 'this works'
else:
    print 'this does not work'

同样的事情会发生

在numpy检查的存在,如..

isinstance(var, numbers.Integral)

. .(慢)或..

isinstance(var, (int, long, np.integer))

. .为了匹配所有类型变量,比如np.int8, np.int8。uint16,……

(PY3中Drop long)

从任何地方识别任何整数类对象都是一场棘手的猜谜游戏。检查

var & 0 == 0 

因为真理和非例外可能是一个很好的赌注。类似地,专门检查有符号整数类型:

var ^ -1 ==  -var - 1

如果你想写一个Python 2-3兼容的代码

要测试一个值是否为整数(任何类型),你可以这样做:

# Python 2 and 3: 
import sys
if sys.version_info < (3,):
    integer_types = (int, long,)
else:
    integer_types = (int,)

>>> isinstance(1, integer_types)
True

# Python 2 only:
if isinstance(x, (int, long)):
     ...

# Python 3 only:
if isinstance(x, int):
    ...

来源:http://python3porting.com/differences.html

如果你只需要值,操作符。Index (__index__特殊方法)是我认为的方法。因为它应该适用于所有可以安全转换为整数的类型。例如,浮点数失败,整数,甚至没有实现Integral抽象类的花哨整数类都可以通过duck typing工作。

操作符。索引用于列表索引等。在我看来,它应该被更多地使用/推广。

事实上,我认为这是唯一正确的方法来获得整数值,如果你想确定浮点数,由于截断问题等被拒绝,它适用于所有整型(即numpy等),即使他们可能(还)不支持抽象类。

这就是引入__index__的目的!

val=3
>>> isinstance(val,int ) 
True

将工作。