Python 3.0 yield 生成器与协程

使用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()				# 匹配器函数调用结束

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值