这是一个有点奇怪的问题,所以我来解释一下:
我有一个像这样的生成器,它作为IRC服务器的前端:
def irc_iter(): # not the real code, simplified
msgs = get_msgs()
for msg in msgs:
if is_ping(msg):
pong()
else:
to_send = yield msg
for s in to_send:
send(s)
理论上,这应该让我做一些很酷的事情,比如:
server = connect()
for line in server:
if should_respond(line):
server.send('WOW SUCH MESSAGE')
然而,这里有一个问题:generator.send
也会产出下一个值。这意味着server.send
也会把下一个消息传递给我...而我更希望像处理其他所有被产出的line
消息那样来处理它。
我知道我可以用一种丑陋的方式解决这个问题,即在接收到send后仅产生一个垃圾值,但我试图保持我的代码简洁优雅,而这恰好相反。有没有一种方法可以告诉生成器我暂时不想要新值?
谢谢。
yield
语句。我已经成功地将这样的消费者重写为明确地send
所有时间,即使大多数时间我发送None
。不确定这是否对你有帮助,但这是一个想法。 - roippisend()
和next()
,所以send()
只是带有参数的next()
。 - SingleNegationElimination