擅长:python、mysql、java
<p>一开始我误解了这个问题,但我想我现在有了一个解决方案(而且与我的另一个答案完全不同,因此有必要提出一个新的解决方案)。基本上,第一次在目录上运行walk时执行常规查询,但是存储生成的值。第二次,您只需生成这些存储值。我已经把手术室步行()打电话是因为它很短,但你可以很容易地把你的发电机包装成一个整体。在</p>
<pre><code>cache = {}
def os_walk_cache( dir ):
if dir in cache:
for x in cache[ dir ]:
yield x
else:
cache[ dir ] = []
for x in os.walk( dir ):
cache[ dir ].append( x )
yield x
raise StopIteration()
</code></pre>
<p>我不确定您的内存需求,但您可能需要考虑定期清理<code>cache</code>。在</p>