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)