【发布时间】:2019-04-07 10:41:21
【问题描述】:
我正在按照说明学习协程
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有何相似之处。 -
我猜在它的实现细节中它是一个类。但是被命名为考虑语法的函数。 @timgeb
-
@Sawajin 你不是在问实施细节吗?
grep是function的一个实例,grep('foo')是generator的一个实例。如果它们是类,它们将是type(或某些元类)的实例。 -
对于其他读者:这个问题似乎源于 David Beazley 的 A Curious Course on Coroutines and Concurrency(见幻灯片)
标签: python generator coroutine