有没有一种简单的方法来确定变量是列表、字典还是其他什么?


当前回答

小心使用isinstance

isinstance(True, bool)
True
>>> isinstance(True, int)
True

但类型

type(True) == bool
True
>>> type(True) == int
False

其他回答

小心使用isinstance

isinstance(True, bool)
True
>>> isinstance(True, int)
True

但类型

type(True) == bool
True
>>> type(True) == int
False

使用类型():

>>> a = []
>>> type(a)
<type 'list'>
>>> f = ()
>>> type(f)
<type 'tuple'>
value = 12
print(type(value)) # will return <class 'int'> (means integer)

或者你可以这样做

value = 12
print(type(value) == int) # will return true

在对象的实例上,还具有:

__class__

属性下面是一个来自Python3.3控制台的示例

>>> str = "str"
>>> str.__class__
<class 'str'>
>>> i = 2
>>> i.__class__
<class 'int'>
>>> class Test():
...     pass
...
>>> a = Test()
>>> a.__class__
<class '__main__.Test'>

请注意,在python3.x和NewStyle类(可从Python2.6中选择)中,类和类型已经合并,这有时会导致意外的结果。主要是因为这个原因,我最喜欢的测试类型/类的方法是使用内置函数。

为了完整起见,isinstance不适用于非实例的子类型的类型检查。虽然这很有道理,但没有一个答案(包括公认的答案)涵盖了这一点。请使用issubclass。

>>> class a(list):
...   pass
... 
>>> isinstance(a, list)
False
>>> issubclass(a, list)
True