Python 将发送到生成器与itertools.tee一起使用

Python 将发送到生成器与itertools.tee一起使用,python,generator,itertools,python-3.6,Python,Generator,Itertools,Python 3.6,我正在尝试使用send和拆分生成器。虽然这适用于不带send的生成器,但此示例会产生以下错误: AttributeError:'itertools.\u tee'对象没有属性'send' 是否有任何解决方法或其他方法来拆分生成器。(列出列表或不使用生成器在这里不是一个选项)您的i()代码首先生成,然后接受x。这意味着您需要首先调用next(),然后调用send()您的i()代码首先生成,然后接受x。这意味着您需要先调用next(),然后调用send() 是否有任何解决方法或其他方法来拆分生成器

我正在尝试使用
send
和拆分生成器。虽然这适用于不带
send
的生成器,但此示例会产生以下错误:

AttributeError:'itertools.\u tee'对象没有属性'send'

是否有任何解决方法或其他方法来拆分生成器。(列出列表或不使用生成器在这里不是一个选项)

您的
i()
代码首先生成,然后接受
x
。这意味着您需要首先调用
next()
,然后调用
send()

您的
i()
代码首先生成,然后接受
x
。这意味着您需要先调用
next()
,然后调用
send()

是否有任何解决方法或其他方法来拆分生成器

常规(单向)生成器可以轻松地使用或使用纯python等效工具

但是,双向生成器(使用
g.send(x)
推入数据并使用
x=yield y
接收数据)是不可拆分的

原因是,类似于T形的拆分基本上缓冲了以前报告的结果,以便在每次拆分时重复使用。但是双向迭代器不能重用以前的结果,因为它正在发送新的值,这可能会影响将来的调用

因此,当您可以将数据从任何一个已前进到不同位置的分割流中推回时,分割流的整个概念就不再有意义了

是否有任何解决方法或其他方法来拆分生成器

常规(单向)生成器可以轻松地使用或使用纯python等效工具

但是,双向生成器(使用
g.send(x)
推入数据并使用
x=yield y
接收数据)是不可拆分的

原因是,类似于T形的拆分基本上缓冲了以前报告的结果,以便在每次拆分时重复使用。但是双向迭代器不能重用以前的结果,因为它正在发送新的值,这可能会影响将来的调用


因此,当您可以将数据从任何一个拆分的流中推回时,拆分流的整个概念就不再有意义了,因为每个拆分的流都可以前进到不同的位置。

我一直在尝试交换
next()
send
,但这似乎不起作用。你能给我举个例子吗?我不能,我从来没有写过同时产生收益和接受收益的代码。我所做的就是以你为例,先尝试
next()
,然后
send()
我应该得到否决票。我想我会在你的帖子上发表评论,但忘了,我把它变成了一个答案:(我一直在尝试交换
next()
send
,但这似乎不起作用。你能给我举个例子吗?我不能,我从来没有写过同时产生收益和接受收益的代码。我所做的只是以你为例,先尝试
next()
,然后尝试
send()
我应该得到否决票。我原以为我会对你的帖子发表评论,但忘了,我把它变成了一个答案:(
from itertools import tee


def i():
    for j in range(10):
        yield j
        x = yield


k = i()
k.send(None)
next(k)

l1, l2 = tee(k)
next(l1)
l1.send(None)