python生成器

    一、概念:生成器是特殊的迭代器,只要函数yield的函数就是生成器函数。
    二、作用:可以控制一个函数的执行,让一个函数执行到yield后停止执行,并返回对应的数据;可以使用next和send函数来启动生成器,执行函数体。
    三、执行过程:当第一次启动生成器函数执行时,会从函数体的开头开始执行;之后再启动时,就会从上次执行暂停的地方,也就是yield处接着执行。

1.使用next启动生成器
def create_num(all_num):
	print("-------1-------")
	a, b = 0, 1
	current_num = 0
	while current_num < all_num:
		print("-------2-------")
		yield a  # 3.函数体执行到yield后会将a返回,并且停在此次执行,下次会从下一行代码继续执行
		print("-------3--------")
		a, b = b, a+b
		current_num += 1
		print("-------4--------")


if __name__ == "__main__":
	obj = create_num(22)  # 1.这里不会执行函数体,会创建一个生成器对象给obj
	ret = next(obj)  # 2.next会执行实参对应的函数体,如果上次已经执行到yield,则会从yield处继续执行
	print(ret)
	ret = next(obj)
	print(ret)
2.使用send启动生成器
def create_num(all_num):
	a, b = 0, 1
	current_num = 0
	while current_num < all_num:
		res = yield a  
		print("res: ", res)
		a, b = b, a+b
		current_num += 1


if __name__ == "__main__":
	obj = create_num(2)  
	ret = next(obj)  
	print(ret)
	ret = obj.send("传递给yield左边对象的数据")
	"""
		1.send启动生成器时,可以传递数据,将数据传递给yield左边的res;
		2.之后继续执行yield的下一行代码,最后yield返回a的值给ret
	"""
	print(ret)

3.区别:next启动时不可以传递数据给生成器函数,而send启动时可以传递数据给生成器函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值