Escribiendo una clase, ¿cómo implementopython - ¿soporta .send() para una clase?
foo.send (item)?
__iter__
permite iterar sobre la clase como un generador, ¿y si quiero que sea una corutina?
Escribiendo una clase, ¿cómo implementopython - ¿soporta .send() para una clase?
foo.send (item)?
__iter__
permite iterar sobre la clase como un generador, ¿y si quiero que sea una corutina?
Aquí es una basic example of a coroutine:
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
cr.next()
return cr
return start
@coroutine
def grep(pattern):
print "Looking for %s" % pattern
while True:
line = (yield)
if pattern in line:
print(line)
g = grep("python")
# Notice how you don't need a next() call here
g.send("Yeah, but no, but yeah, but no")
g.send("A series of tubes")
g.send("python generators rock!")
# Looking for python
# python generators rock!
Podemos hacer una clase que contiene un co-rutina tales, y los delegados llama a su método send
a la co-rutina:
class Foo(object):
def __init__(self,pattern):
self.count=1
self.pattern=pattern
self.grep=self._grep()
@coroutine
def _grep(self):
while True:
line = (yield)
if self.pattern in line:
print(self.count, line)
self.count+=1
def send(self,arg):
self.grep.send(arg)
foo = Foo("python")
foo.send("Yeah, but no, but yeah, but no")
foo.send("A series of tubes")
foo.send("python generators rock!")
foo.pattern='spam'
foo.send("Some cheese?")
foo.send("More spam?")
# (1, 'python generators rock!')
# (2, 'More spam?')
en cuenta que foo
actúa como una corutina (en la medida en que tiene un método de envío), pero es una clase; puede tener atributos y métodos que pueden interactuar con la corutina.
Para obtener más información (y ejemplos maravillosos), ver de Curious Course on Coroutines and Concurrency.
había leído el "curioso curso" de Beazley, y estaba tratando de implementar algo de lo que aprendí allí cuando hice esta pregunta. Gracias por mostrar el def enviar(), no estaba seguro de si ese era el enfoque para tomar o no .. –
No está integrado en Python como '__iter__' David Beazley. –
Los generadores y coroutines son el mismo tipo de objeto en Python. – katrielalex