【发布时间】:2010-02-24 23:45:11
【问题描述】:
如果列出目录并读取其中的文件,与返回目录中所有文件的列表相比,yield 的性能在什么时候开始恶化?
这里我假设一个有足够的 RAM 来返回(可能很大的)列表。
PS 我在注释中内联代码时遇到问题,所以我会在这里放一些示例。
def list_dirs_list():
# list version
return glob.glob(/some/path/*)
def list_dirs_iter():
# iterator version
return glob.iglob(/some/path/*)
在幕后,对 glob 的两个调用都使用 os.listdir,因此看起来它们在性能方面是等效的。但this Python doc 似乎暗示 glob.iglob 更快。
【问题讨论】:
-
您是否有代码可以说明您的担忧?
-
@saidimu:我正在查看那个页面,但我看不到它在哪里说
iglob()更快。它说iglob()返回它的结果“实际上并没有同时存储它们”,但这并不一定意味着任何关于性能的事情。 -
我认为不必同时存储它们会对速度(和内存)产生积极影响?
-
@saidimu:你为什么会这么认为?你应该测量,因为它很容易使用
timeit: docs.python.org/library/timeit.html -
@saidimu:“我在注释中内联代码时遇到问题”。切勿在您拥有的问题的评论中发布代码。这是你的问题。更新您的问题。不要在您已经拥有并且可以解决的问题上与 cmets 混淆。