Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打包/解包发电机_Python - Fatal编程技术网

Python 打包/解包发电机

Python 打包/解包发电机,python,Python,我有两台发电机。第一个生成器有时需要调用第二个生成器并返回从那里获得的值: def a(): for _b in b(): yield _b def b(): yield 1 yield 2 for _a in a(): print _a 有没有更优雅的方法可以做到这一点: for _b in b(): yield _b 我试过这个: yield *b() 但肯定不行。我有Python 2.6。在这个简单的例子中,您可以只编写a=

我有两台发电机。第一个生成器有时需要调用第二个生成器并返回从那里获得的值:

def a():
    for _b in b():
        yield _b

def b():
    yield 1
    yield 2

for _a in a():
    print _a
有没有更优雅的方法可以做到这一点:

for _b in b():
    yield _b
我试过这个:

yield *b()

但肯定不行。我有Python 2.6。

在这个简单的例子中,您可以只编写
a=b
a=lambda:b
。但是如果
a
添加了自己的元素,则可以使用:

请记住,尽管这个变体可能较短,但for:yield是一个非常直观(因此很容易理解)的模式。是的。它看起来像:

 yield from b()
Python2中没有专门的语法。您只需使用for循环


你问题中的
a
函数实际上是完全无用的。您可以在它的位置使用
b

您可以使用生成器表达式。它与循环一样简洁,而且它表明您的代码主要用于生成返回值,而不是产生副作用

def a():
    return (_b for _b in b())

正如phihag所说,如果你的代码真的像这个例子一样,你可以简单地编写
a=b
,因为a和b返回相同的序列。

你真的试图一次返回(产生)来自
b()
的所有内容吗?是的,我试图在a()中产生我从b()得到的所有值。
a()
是一个刮擦蜘蛛的回调函数()
a
您编写的是一个名为
iter
return(\u b for b in b())
更容易(更有效)编写为
return b()
,如果
a
本身是一个生成器函数,它就不起作用了(如问题所述)。是的,这不起作用,当它产生一个类型的值时,你能给我一个例子说明这个
a
的行为与原来的不同吗?它们都在a()中为a工作:
:打印a
,并且都告诉我
类型(a())
是“生成器”。在真实代码(刮擦蜘蛛法)中,
a
产生它自己的一些值。我想如果有一个政治公众人物,这意味着问题是已知的,目前没有优雅的解决方案。
def a():
    return (_b for _b in b())