避免遍历时生成临时列表

避免遍历时生成临时列表

Question #

我们看下面的代码有什么问题?

# 错误示例
adict = {i: i * 2 for i in xrange(10000000)}
for key in adict.keys():
   print("{0} = {1}".format(key, adict[key]))

Answer #

keys() 方法会在遍历前生成一个临时的列表,导致上面的代码消耗大量内存并且运行缓慢。正确的方式,是使用默认的 iterator。默认的 iterator 不会分配新内存,也就不会造成上面的性能问题:

# 正确示例
for key in adict:

这也就是为什么 Google Style 2.8 对于遍历方式的选择作出了限制。

Viewpoint #

From #

26 | 活都来不及干了,还有空注意代码风格?!