视图让您无需复制即可访问底层数据结构。除了动态而不是创建列表之外,它们最有用的用法之一是in 测试。假设您要检查一个值是否在 dict 中(它是键或值)。
选项一是使用dict.keys() 创建一个键列表,这可行,但显然会消耗更多内存。如果字典很大?那会很浪费。
使用views,您可以迭代实际的数据结构,而无需中间列表。
让我们使用示例。我有一个包含 1000 个随机字符串和数字键的字典,k 是我要查找的键
large_d = { .. 'NBBDC': '0RMLH', 'E01AS': 'UAZIQ', 'G0SSL': '6117Y', 'LYBZ7': 'VC8JQ' .. }
>>> len(large_d)
1000
# this is one option; It creates the keys() list every time, it's here just for the example
timeit.timeit('k in large_d.keys()', setup='from __main__ import large_d, k', number=1000000)
13.748743600954867
# now let's create the list first; only then check for containment
>>> list_keys = large_d.keys()
>>> timeit.timeit('k in list_keys', setup='from __main__ import large_d, k, list_keys', number=1000000)
8.874809793833492
# this saves us ~5 seconds. Great!
# let's try the views now
>>> timeit.timeit('k in large_d.viewkeys()', setup='from __main__ import large_d, k', number=1000000)
0.08828549011070663
# How about saving another 8.5 seconds?
如您所见,迭代view 对象可以极大地提高性能,同时减少内存开销。当您需要执行Set 之类的操作时,您应该使用它们。
注意:我在 Python 2.7 上运行