1

我想检查变量的类型是否是 Python 中的特定类型。例如 - 我想检查 varx是否是 int 。

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

但是我怎么能比较他们的类型。我试过这个,但它似乎不起作用。

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

我怎样才能做到这一点 ?

4

3 回答 3

4

使用该isinstance()函数测试特定类型:

isinstance(x, int)

isinstance()采用单一类型或类型元组进行测试:

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

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

于 2013-03-03T15:08:00.603 回答
4

你的例子可以写成:

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

但请注意,它可能不会完全按照您的意愿行事,例如,如果您写了10Lor 一个大于sys.maxint而不是 just的数字10,则不会打印 yes,因为long(这将是此类数字的类型) is not int

另一种方法是,正如 Martijn 已经建议的那样,使用isinstance()内置函数如下:

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

insinstance(instance, Type)True不仅返回iftype(instance) is Type而且如果实例的类型派生自Type. 因此,因为boolis intthis 的子类也适用于Trueand False

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

但是,如果您需要以不同的方式处理例如整数和浮点数,您可能需要检查isinstance(var, numbers.Integral)(needs import numbers) 评估为Trueifvar是 type intlongbool任何从此类派生的用户定义类型。请参阅有关标准类型层次结构和 [numbers模块]的 Python 文档

于 2013-03-03T16:02:24.400 回答
0

您可以使用以下方式:

>>> isinstance('ss', str)
True
>>> type('ss')
<class 'str'>
>>> type('ss') == str
True
>>> 

整数 - > 整数

float -> 浮点值

列表 -> 列表

元组 -> 元组

字典 -> 字典

对于类,它有点不同:旧类型类:

>>> # 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
于 2018-08-19T18:16:00.080 回答