【发布时间】:2017-11-24 23:30:00
【问题描述】:
我正在尝试提供一个统一的接口,用于从单个目录或目录列表中检索所有文件。
def get_files(dir_or_dirs):
def helper(indir):
file_list = glob.glob("*.txt")
for file in file_list:
yield file
if type(dir_or_dirs) is list:
# a list of source dirs
for dir in dir_or_dirs:
yield helper(dir)
else:
# a single source dir
yield helper(dir_or_dirs)
def print_all_files(file_iter):
for file in file_iter:
print(file) # error here!
问题:
- 错误表明“文件”仍然是一个生成器,无论输入是单个目录还是它的列表。为什么它仍然是发电机?
- 是否可以在函数中包装或嵌入生成器?如果是这样,如何使这项工作?
【问题讨论】:
-
你为什么要
yieldhelper的返回值? Helper 是一个生成器函数,它返回一个生成器迭代器。如果你想产生生成器产生的所有东西,那就是yield from。 -
正在尝试为所有目录下的所有文件获取生成器。感谢'yield from'的提醒!