我正在按照一份指南学习协程
def grep(pattern):
print("Looking for %s" % pattern) # prime it(explain shortly)
while True:
line = (yield) # expression
if pattern in line:
print(line)
测试它
>>> g = grep("python")
>>> g.next()
Looking for python
>>> g.send("coroutine test")
>>> g.send("learning python")
似乎yield表达式的作用类似于functools.partial,除了它应该使用next()来初始化。
此时,def grep
实际上是一个class grep
,因为它首先初始化了一个生成器对象。
协程很难跟踪,我的理解是继续前进而没有进一步的副作用,因为Python将其命名为def
而不是class
,应该有她的原因。
type(grep)
是function
,type(grep('foo'))
是generator
。我不确定你看到了什么与functools.partial
相似的并行之处。 - timgebgrep
是function
的一个实例,而grep('foo')
则是generator
的一个实例。如果它们是类,那么它们将是type
(或某个元类)的实例。 - timgeb