首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >了解python中的嵌套收益/回报

了解python中的嵌套收益/回报
EN

Stack Overflow用户
提问于 2011-06-28 15:32:03
回答 1查看 10.2K关注 0票数 21

我在python中有一个函数,它的输出是一个生成器:

代码语言:javascript
复制
def main_function(x):
    r = get_range()
    for i in range(r):
        yield x+i

我想重构代码(我简化了用例,但实际的计算可能会很复杂&更长。请参阅下面的编辑)。根据我的理解,这是我应该做的,以保持功能不变:

(a)与原始代码相同的接口

代码语言:javascript
复制
    def sub_function(x,r):
        for i in range(r):
            yield x+i    

    def main_function(x):
        r = get_range()
        return sub_function(x,r)

与其他方法相比的 :

(b)这会返回生成器的生成器(这种方法有什么优点吗?)

代码语言:javascript
复制
    def sub_function(x,r):
        for i in range(r):
            yield x+i    

    def main_function(x):
        r = get_range()
        yield sub_function(x,r)

(c)这将违背发电机的目的(正确吗?)

代码语言:javascript
复制
    def sub_function(x,r):
        return [x+i for i in range(r)]

    def main_function(x):
        r = get_range()
        for i in sub_function(x,r):
            yield(i)

EDIT:注释指出正确答案取决于用例。我想补充的是,我的用例是解析XML文件以提取字段并将其写入数据库。这部分委托给sub_function()。我还问了这个问题,以便对嵌套收益在重构代码中的用法有一个大致的了解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-28 15:42:32

你是对的;最初的例子和a)做了同样的事情,因为它们都返回一个生成器。

b)不同:它返回一个生成器,该生成器产生单个元素(这是另一个生成器)。要使用它,您需要两个循环(一个在外部,一个在内部生成器上)。

这本身并没有什么优势,但有时,它对于构建嵌套生成器很有用。

c)可能会更糟,但我非常确定[x for x in y]实际上也是作为生成器实现的。所以它有点贵,但也不是那么贵。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6503079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档