2013-03-03 93 views
1

我想检查变量的类型是否是Python中的特定类型。例如,我想检查var x是否为int。检查变量的类型是否是Python中的特定类型

>>x=10 
>>type(x) 
<type 'int'> 

但是我怎样才能比较它们的类型。我试过这个,但它似乎没有工作。

if type(10)== "<type 'int'>": 
    print 'yes' 

我该怎么做?

+4

值得注意的是,显式检查和分支变量类型被广泛认为是非pythonic,因为它直接违反了鸭子打字:http:// en .wikipedia.org/wiki/Duck_typing – NPE 2013-03-03 15:19:31

回答

4

使用isinstance() function以测试特定类型:

isinstance(x, int) 

isinstance()它可以是一个单一类型或类型的元组,以测试针对:

isinstance(x, (float, complex, int)) 

将测试进行了一系列的例如,不同的数字类型。

+1

值得注意的是,您也可以使用元组而不是类型,然后如果变量是元组中给出的任何类型,则它将返回True,例如:'isinstance(x ,(int,float,decimal))'如果'x'是一个int,或者一个浮点数或者一个小数,'会返回True。 – 2013-03-03 15:09:26

+0

@InbarRose:确实;我总是用'complex'作为那个例子。 :-) – 2013-03-03 15:11:56

3

你举的例子可以写成:

if type(10) is int: # "==" instead of "is" would also work. 
    print 'yes' 

但是请注意,这可能不完全是你想要什么,例如,如果你写10L或数大于sys.maxint,而不是仅仅10,这将不打印是,因为long(这将是这样一个数字的类型)不是int

另一种方式是,如马亭已经建议,使用isinstance()内建函数如下:

if isinstance(type(10), int): 
    print 'yes' 

insinstance(instance, Type)回报True不仅当type(instance) is Type而且如果实例的类型是从Type的。因此,由于boolint的子类,因此这也适用于TrueFalse

但通常最好不要检查特定类型,而是为了检查功能,您需要。也就是说,如果你的代码不能处理这个类型,它会在尝试对这个类型执行一个不支持的操作时自动抛出一个异常。

但是,如果您需要处理整数和浮点数不同,你可能要检查isinstance(var, numbers.Integral)(需要import numbers)的演算值为True如果varint类型,longbool或者是从这个类派生的任何用户定义类型的。请参阅the standard type hierarchy和[numbers模块]上的Python文档

相关问题