Próbuję współprogram rurociągu według http://www.dabeaz.com/coroutines/Coroutines.pdfJak uzyskać wartości zwracanej z współprogram w Pythonie
pytanie brzmi, w jaki sposób można uzyskać wartość z sink
zamiast drukować tylko to?
Weź ten kod np
def coroutine(func):
def start(*args, **kwargs):
cr = func(*args, **kwargs)
next(cr)
return cr
return start
@coroutine
def produce(target):
while True:
n = (yield)
target.send(n*10)
@coroutine
def sink():
try:
while True:
n = (yield)
print(n)
except GeneratorExit:
pass
sk = sink()
pipe = produce(sink())
Z tego kodu uzyskać:
>>> pipe.send(10)
100
Następnie chcę, aby uzyskać wartość zwrotną zamiast je drukować, staram się, uzyskując z umywalką:
@coroutine
def sink():
try:
while True:
yield (yield)
except GeneratorExit:
pass
Ale wydaje się nie działać, pipe.send(10)
nadal zwraca None
zamiast generator.
Jak uzyskać wartość zwrotu?
powiedzieć, jeśli pcham w wartości A i wartość B, po filtrze, transmisji, przetwarzania etc, Wygenerowane 10 wartości tonąć, a B generowane 8 wartości tonąć. I chcę maksymalną wartość od A i maksymalną wartość od B, ale jak mam powiedzieć, która wartość jest generowana z A lub z B? Masz pomysł, jak to zrobić w zlewie? – lxyu
@lxyu Możesz wysłać klucz, aby dowiedzieć się, który producent wytworzył wartość, a zlew może mieć stan, aby wiedzieć, które wartości są wysyłane i która wartość jest wartością maksymalną. Zobacz moją edycję. – sloth
Proponuję wysłać obiekt, który zawiera wszystkie potrzebne dane! – Cucu