不能做"类型是"测试dict_keys / dict_values / dict_items?

时间:2016-10-19 21:36:10

标签: python-3.x

是否可以使用&#34测试Python 3的 dict_keys dict_values dict_items 内置类型;类型是"声明?

很容易获得给定的内置类型(在此示例中为 float ):

>>> type(4.5)
<class 'float'>

使用&#34;类型是&#34;用于测试其类型的声明:

>>> type(4.5) is float
True
>>> type(4.5) is int
False

现在我将创建一个简单的Python字典:

simpleDict = {
    'firstKey' : 'firstValue',
    'secondKey' : 'secondValue',
    }

很容易列出字典 _keys _values ,或者在此示例中 _items

>>> simpleDict.items()
dict_items([('secondKey', 'secondValue'), ('firstKey', 'firstValue')])

获取该字典的 dict _ 内置类型之一的类型:

>>> type(simpleDict.items())
<class 'dict_items'>

但现在我无法弄清楚如何使用&#34;类型是&#34;用于测试内置类型的语句:

>>> type(simpleDict.items()) is dict_items
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'dict_items' is not defined

我没有必要这样做的实际原因,我只是好奇为什么 dict _ 内置类型被报告为&#34;未定义&#34; ,因而显然不具有&#34;类型的可测试(?)是&#34;测试

1 个答案:

答案 0 :(得分:1)

正如Padraic Cunningham在评论中所说,您可以使用以下测试来检查dict_items是否相等:

>>> type(simpleDict.items()) is {}.items().__class__
True

这也适用于keys()values()

>>> type(simpleDict.keys()) is {}.keys().__class__
True
>>> type(simpleDict.values()) is {}.values().__class__
True

通常,要对类执行“类型为”测试,请初始化该类的空对象,然后获取该对象的__class__成员以进行比较。