我想检查变量的类型是否是Python中的特定类型。例如 - 我想检查var x
是否为int。
>>x=10
>>type(x)
<type 'int'>
但我怎样才能比较他们的类型。我试过这个,但它似乎没有用。
if type(10)== "<type 'int'>":
print 'yes'
我该怎么做?
答案 0 :(得分:4)
使用isinstance()
function测试特定类型:
isinstance(x, int)
isinstance()
采用单一类型或类型元组进行测试:
isinstance(x, (float, complex, int))
例如,将测试一系列不同的数字类型。
答案 1 :(得分:3)
你的例子可以写成:
if type(10) is int: # "==" instead of "is" would also work.
print 'yes'
但请注意,它可能不完全符合您的要求,例如,如果您编写10L
或数字大于sys.maxint
而非10
,则不会打印是,因为long
(这是一个这样的数字的类型)不是int
。
另一种方法是,正如Martijn已经建议的那样,使用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
模块]
答案 2 :(得分:0)
您可以使用以下方式:
>>> isinstance('ss', str)
True
>>> type('ss')
<class 'str'>
>>> type('ss') == str
True
>>>
int->整数
float->浮点值
列表->列表
元组->元组
dict->字典
对于类,它有些不同: 旧类型的类:
>>> # We want to check if cls is a class
>>> class A:
pass
>>> type(A)
<type 'classobj'>
>>> type(A) == type(cls) # This should tell us
新型类:
>>> # We want to check if cls is a class
>>> class B(object):
pass
>>> type(B)
<type 'type'>
>>> type(cls) == type(B) # This should tell us
>>> #OR
>>> type(cls) == type # This should tell us