在python中有"太多的yield语句"这样的东西吗?

sai*_*ale 4 python yield

如果执行目录列表并读取其中的文件,那么与返回目录中所有文件的列表相比,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/*)
Run Code Online (Sandbox Code Playgroud)

在幕后都调用了glob使用os.listdir所以看起来它们在性能方面是相同的.但是这个Python文档似乎暗示了glob.iglob更快.

rec*_*ive 5

没有必要进一步使用yield结果来降低性能.事实上,与在列表中组装东西相比,yield实际上通过比较改进了更多的元素.