两个函数的收益

时间:2019-01-19 00:11:02

标签: python generator

我想分别访问每个生成的对象,而无需直接在生成器函数上进行迭代。

我具有以下“生成器”功能,该功能可以确定应该下载文件还是将其作为文件对象返回

salut

以下功能实际下载文件并调用前一个功能

def retrieve_file(content, to_download, filename):
    if to_download: 
        # Should download this file to the local computer
        with open(filename, 'wb') as f:
            f.write(content)
        return filename
    else:
        # Do not download, keep it as a file object
        output = StringIO()
        output.write(content)
        return output # Should be replaced with yield?

主要功能是在这种情况下将所有文件下载为对象,然后分别解析每个文件

def get_all_files(to_download):
    for year in [2000, 2001, 20002, 2003]:
        content = download_file(year)
        result = retrieve_file(content,
                               to_download,
                               'file-%s.pdf' % year)
        return result

在此示例中,删除get_all_files函数,然后将yield_file中的第二个返回值替换为yield即可。问题是我想将这两个函数(main和get_all_files)分开,因为它们位于两个不同的模块中

1 个答案:

答案 0 :(得分:0)

只需将return中的get_all_files替换为yield。这将允许您遍历每个文件。

def get_all_files(to_download):
    for year in [2000, 2001, 20002, 2003]:
        content = download_file(year)
        result = retrieve_file(content,
                               to_download,
                               'file-%s.pdf' % year)
        yield result