在Python中检查变量的类型是否为特定类型

4
我想检查Python中变量的类型是否是特定的类型。例如 - 我想检查变量x是否为整型。
>>x=10
>>type(x)
<type 'int'>

但是我该如何比较它们的类型呢?我尝试了这个方法,但似乎并没有起作用。

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

我该怎么做呢?

5
值得注意的是,显式检查变量类型并根据其分支判断被广泛认为是不符合Python风格的,因为它直接违反了鸭子类型的原则:http://en.wikipedia.org/wiki/Duck_typing - NPE
3个回答

7

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

isinstance(x, int)

isinstance() 函数接受一个类型或一个类型元组作为参数进行测试:

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

比如,需要测试一系列不同的数字类型。


1
值得注意的是,你也可以使用元组而不是类型,如果变量属于元组中给定的任何一种类型,则它将返回True。例如:isinstance(x, (int, float, decimal)) 如果 x 是整数、浮点数或者十进制数,那么就会返回True。 - Inbar Rose
@InbarRose:确实,我总是以complex作为例子。 :-) - Martijn Pieters

4

你的例子可以这样写:

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

但请注意它可能不会完全做您想要的事情,例如,如果您写了10L或大于sys.maxint的数字而不是只有10,这将不会打印出“yes”,因为这样的数字类型为long而不是int

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

if isinstance(type(10), int):
    print 'yes'
insinstance(instance, Type) 不仅在 type(instance) is Type 的情况下返回 True,而且在实例的类型派生自 Type 的情况下也是如此。因此,由于 boolint 的子类,这对于 TrueFalse 也适用。
但通常最好不要检查特定类型,而是检查所需功能。也就是说,如果您的代码无法处理该类型,则在尝试对该类型执行不支持的操作时会自动引发异常。
然而,如果您需要以不同的方式处理整数和浮点数,您可能需要检查 isinstance(var, numbers.Integral)(需要 import numbers),它将评估为 True,如果 var 是类型 intlongbool 或任何派生自此类的用户定义类型。请参见 Python 文档中关于标准类型层次结构和 [numbers 模块]。

0
您可以使用以下方式:
>>> isinstance('ss', str)
True
>>> type('ss')
<class 'str'>
>>> type('ss') == str
True
>>> 

int -> 整数

float -> 浮点数

list -> 列表

tuple -> 元组

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接