使用yield语句(任何使用yield的函数都称为生成器,不用return进行返回),可以让函数生成一个结果序列,而不仅仅是返回一个值,生成器会分步执行,如果使用next()调用生成器,每次都会执行到下一条yield语句为止。
#! /usr/bin/python3.4
def countdown(n):
print ("Counting down!")
print (n,"\n")
while n > 0:
n -= 1
yield n
for i in countdown(5):
print(i)
结果:
Counting down!
5
4
3
2
1
0
#! /usr/bin/python3.4
def countdown(n):
print ("Counting down!")
print (n,"\n")
while n > 0:
n -= 1
yield n
a = countdown(5)
print("---",next(a))
for i in a:
print("__________")
print(i)
结果:
Counting down!
5
--- 4
__________
3
__________
2
__________
1
__________
0
协程简述:
发送一系列输入给函数,使函数能进行处理:
#! /usr/bin/python3.4
def print_matches(matchtext):
print("Looking for",matchtext)
while True:
line = yield
if matchtext in line:
print(line)
else:
print("Not found "+"'%s'"%(matchtext)+" in " +'"%s"'%(line))
matcher = print_matches("python") # Looking for python
matcher.__next__() # 向前执行到第一条yield语句,即启动生成器在yield处暂停
#把内容给yield
matcher.send("Hello World") # Not found 'python' in "Hello World"
matcher.send("python is cool") # python is cool
matcher.send("yow!") # Not found 'python' in "yow!"
matcher.close() # 匹配器函数调用结束