Python:笔记(7)——yield关键字

Python:笔记(7)——yield关键字

yield与生成器

  所谓生成器是一个函数,它能够生成一个值的序列,以便在迭代中使用。函数使用yield关键字能够定义生成器对象。python

一个例子

  咱们调用该函数,就会发现其中的代码不会开始执行函数

def countdown(n):
    print('从%d开始减小'%n)
    while(n>0):
        yield n
        n-=1
    return

countdown(10)

  相应的,该函数返回一个生成器对象。接着该生成器对象就会在__next__被调用时执行函数,如:协程

c = countdown(10)
# <generator object countdown at 0x102d0b780>
print(c.__next__())
# 10
print(c.__next__())
# 9

  调用next时,生成器函数开始执行语句,直至遇到yield语句为止。yield语句在函数执行中止的地方生成一个结果,直至再次调用next。而后继续执行yield以后的语句。对象

生成器的用法

  一般不会在生成器上直接调用next()方法,而是经过for语句,sum()或一些消耗序列的其余操做使用生成器。blog

for n in countdown(5):
    print(n)

print(sum(countdown(5)))

  

协程与yield表达式

  在函数内,yield语句还能够做为表达式使用,出如今赋值运算符的右边,例如:generator

def receiver():
    print('Ready to receive')
    while True:
        n = (yield)
        print(n)

r = receiver()
r.__next__()
# Ready to receive
r.send(1)
# 1
r.send(2)
# 2
r.send('Hello')
# Hello

  以这种方式使用yield语句的函数称为协程,向函数发送值时函数将执行。接收到值后,协程就会执行语句,直至遇到下一个yield语句。class

说明:一开始必须先执行next函数,这样协程才能执行第一个yield表达式以前的语句object

关闭协程

  协程通常会不断地执行下去,除非被显式关闭或本身退出,显式关闭执行close语句便可。yield

相关文章
相关标签/搜索