gpt4 book ai didi

Python:懒惰地遍历类目录结构

转载 作者:行者123 更新时间:2023-11-28 17:29:07 26 4
gpt4 key购买 nike

我想通过类似目录的结构应用函数。由于 Python 3 支持延迟生成器,我考虑过使用它们来延迟计算结果列表。这是我的方法:

iterate = lambda func, d: (func(f) for f in listDir(d) if not f.isDir) + sum((iterate(func, d + f.name) for f in listDir(d) if f.isDir.), [])

这会导致 + 的操作数类型不受支持:'generator' 和 'list'。有没有一种惯用的方式用惰性生成器来表达这一点?

listDir 接受路径并返回文件信息列表。

最佳答案

假设顺序不重要,我认为通常会这样写:

def iterate(func, d):
for f in listDir(d):
if f.isDir:
yield from iterate(func, d + f.name)
else:
yield func(f)

yield from 仅存在于 Python 3.3,在此之前你可以:

for x in iterate(func, d + f.name):
yield x

如果您确实需要将生成器串在一起,那么 itertools.chainitertools.chain.from_iterator 是这项工作的标准工具:

def iterate(func, d):
return itertools.chain(
(func(f) for f in listDir(d) if not f.isDir),
itertools.chain.from_iterable(
iterate(func, d + f.name) for f in listDir(d) if f.isDir)
)
)

关于Python:懒惰地遍历类目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com