我有一个函数,它会在下载结果时产生结果。对于这个问题,假设我每秒产生一次刺痛,但我想要一个方便的函数来包装我的生成器:
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个字符串吗?相反,它似乎返回生成器函数:
<generator object GeneratorFunction at 0x020649B8>
我怎样才能让它像普通的生成器函数那样产生字符串呢?
发布于 2012-06-26 04:54:24
不敢相信我错过了这一点;答案是简单地返回应用了适当参数的生成器函数:
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
发布于 2014-09-05 21:18:51
您可能必须使用从Python3.3开始提供的称为“delegated generator”的new yield from
。
如果我正确理解了这个问题,我就会遇到同样的问题,并在其他地方找到了答案。
我想做这样的事情:
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
我现在使用下面的代码:
yield from g() # Now it works, it yields x and Y.
我从这个页面得到了答案:Python 3: Using "yield from" in Generators - Part 1 (simeonvisser.com)。
发布于 2016-07-23 00:09:04
来到这里寻找一种不同形式的“嵌套收益”,最终找到了隐藏的答案。可能不是最好的,但它是有效的。
我想通过一个注册表树来让步,这就是解决方案。
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
https://stackoverflow.com/questions/11197186
复制相似问题