“从”另一台发电机“产出”,但经过处理

toi*_*ing 4 python yield generator python-3.x yield-from

我们如何从另一个子生成器产生,但要进行转换/处理?

例如:在下面的代码中, main_gen 在使用 f(x) 转换后产生 x

def f(x):
   return 2*x

def main_gen():
   for x in sub_gen():
      yield f(x)
Run Code Online (Sandbox Code Playgroud)

这可以用yield from替换吗?如果可以,如何替换?

def main_gen():
     yield from ***
Run Code Online (Sandbox Code Playgroud)

sch*_*ggl 6

你可以这样做:

def main_gen():
    yield from map(f, sub_gen())
   
Run Code Online (Sandbox Code Playgroud)

但是,为什么不:

def main_gen():
    return map(f, sub_gen())
Run Code Online (Sandbox Code Playgroud)

无论如何,这是一个懒惰的迭代器。