首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从嵌套的生成器函数中产生结果?

如何从嵌套的生成器函数中产生结果?
EN

Stack Overflow用户
提问于 2012-06-26 04:52:27
回答 5查看 32.3K关注 0票数 66

我有一个函数,它会在下载结果时产生结果。对于这个问题,假设我每秒产生一次刺痛,但我想要一个方便的函数来包装我的生成器:

代码语言:javascript
复制
import time

def GeneratorFunction(max_val):
    for i in range(0,5):
        time.sleep(1)
        yield "String %d"%i

def SmallGenerator():
    yield GeneratorFunction(3)

for s in SmallGenerator():
    print s

...why不是只打印了我期望的5个字符串吗?相反,它似乎返回生成器函数:

代码语言:javascript
复制
<generator object GeneratorFunction at 0x020649B8>

我怎样才能让它像普通的生成器函数那样产生字符串呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-26 04:54:24

不敢相信我错过了这一点;答案是简单地返回应用了适当参数的生成器函数:

代码语言:javascript
复制
import time

def GeneratorFunction(max_val):
    for i in range(0,max_val):
        time.sleep(1)
        yield "String %d"%i

def SmallGenerator():
    return GeneratorFunction(3) # <-- note the use of return instead of yield

for s in SmallGenerator():
    print s
票数 37
EN

Stack Overflow用户

发布于 2014-09-05 21:18:51

您可能必须使用从Python3.3开始提供的称为“delegated generator”的new yield from

如果我正确理解了这个问题,我就会遇到同样的问题,并在其他地方找到了答案。

我想做这样的事情:

代码语言:javascript
复制
def f():

    def g():

        do_something()
        yield x
        …
        yield y

    do_some_other_thing()
    yield a
    …
    g()  # Was not working.
    yield g()  # Was not what was expected neither; yielded None.
    …
    yield b

我现在使用下面的代码:

代码语言:javascript
复制
yield from g()  # Now it works, it yields x and Y.

我从这个页面得到了答案:Python 3: Using "yield from" in Generators - Part 1 (simeonvisser.com)

票数 55
EN

Stack Overflow用户

发布于 2016-07-23 00:09:04

来到这里寻找一种不同形式的“嵌套收益”,最终找到了隐藏的答案。可能不是最好的,但它是有效的。

我想通过一个注册表树来让步,这就是解决方案。

代码语言:javascript
复制
        def genKeys(key):
            for value in key.values():
                yield value
            for subkey in key.subkeys():
                print(subkey)
                for x in genKeys(subkey): #this is the trick
                    continue
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11197186

复制
相关文章

相似问题

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