我想检查变量的类型是否是Python中的特定类型。例如,我想检查var x
是否为int。检查变量的类型是否是Python中的特定类型
>>x=10
>>type(x)
<type 'int'>
但是我怎样才能比较它们的类型。我试过这个,但它似乎没有工作。
if type(10)== "<type 'int'>":
print 'yes'
我该怎么做?
我想检查变量的类型是否是Python中的特定类型。例如,我想检查var x
是否为int。检查变量的类型是否是Python中的特定类型
>>x=10
>>type(x)
<type 'int'>
但是我怎样才能比较它们的类型。我试过这个,但它似乎没有工作。
if type(10)== "<type 'int'>":
print 'yes'
我该怎么做?
使用isinstance()
function以测试特定类型:
isinstance(x, int)
isinstance()
它可以是一个单一类型或类型的元组,以测试针对:
isinstance(x, (float, complex, int))
将测试进行了一系列的例如,不同的数字类型。
值得注意的是,您也可以使用元组而不是类型,然后如果变量是元组中给出的任何类型,则它将返回True,例如:'isinstance(x ,(int,float,decimal))'如果'x'是一个int,或者一个浮点数或者一个小数,'会返回True。 – 2013-03-03 15:09:26
@InbarRose:确实;我总是用'complex'作为那个例子。 :-) – 2013-03-03 15:11:56
你举的例子可以写成:
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
的。因此,由于bool
是int
的子类,因此这也适用于True
和False
。
但通常最好不要检查特定类型,而是为了检查功能,您需要。也就是说,如果你的代码不能处理这个类型,它会在尝试对这个类型执行一个不支持的操作时自动抛出一个异常。
但是,如果您需要处理整数和浮点数不同,你可能要检查isinstance(var, numbers.Integral)
(需要import numbers
)的演算值为True
如果var
是int
类型,long
,bool
或者是从这个类派生的任何用户定义类型的。请参阅the standard type hierarchy和[numbers
模块]上的Python文档
值得注意的是,显式检查和分支变量类型被广泛认为是非pythonic,因为它直接违反了鸭子打字:http:// en .wikipedia.org/wiki/Duck_typing – NPE 2013-03-03 15:19:31