Was*_*mad 14
Generator使用yield来返回值.Python生成器函数也可以使用(yield)语句来使用值.此外,还有两个关于生成器对象的新方法,send()并close()为使用和生成值的对象创建框架.定义这些对象的生成器函数称为协同程序.
协程使用(yield)如下语句消耗值:
value = (yield)
Run Code Online (Sandbox Code Playgroud)
使用此语法,执行将暂停此语句,直到使用参数调用对象的send方法:
coroutine.send(data)
Run Code Online (Sandbox Code Playgroud)
然后,执行恢复,将值分配给数据值.为了表示计算的结束,我们使用该close()方法关闭协程.这会在协同程序中引发一个GeneratorExit异常,我们可以使用try/except子句来捕获它.
以下示例说明了这些概念.它是一个协程,可以打印与提供的模式匹配的字符串.
def match(pattern):
print('Looking for ' + pattern)
try:
while True:
s = (yield)
if pattern in s:
print(s)
except GeneratorExit:
print("=== Done ===")
Run Code Online (Sandbox Code Playgroud)
我们用模式初始化它,并调用__next__()开始执行:
m = match("Jabberwock")
m.__next__()
Looking for Jabberwock
Run Code Online (Sandbox Code Playgroud)
调用__next__()导致函数体被执行,因此打印出"寻找jabberwock"这一行.执行将继续,直到line = (yield)遇到该语句.然后,执行暂停,并等待将值发送到m.我们可以使用它发送值send().
| 归档时间: |
|
| 查看次数: |
3951 次 |
| 最近记录: |