python中的yield

本文深入探讨了Python中的生成器函数及其yield表达式的使用方法,详细介绍了如何通过生成器对象执行、发送参数、抛出异常以及关闭生成器。通过示例代码,展示了生成器如何在不同情况下进行操作,以及如何利用其特性实现高效的迭代和计算任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      pythonyield表达式,它只能用于定义生成器函数,生成器可以控制函数的执行,函数可以再生成器语句出暂停执行,当前使用的变量,堆栈等都会保留,直到下次使用生成器方法。下面是一个yield的例子:

def f(n):
	a,b=1,1;
	i=0;
	while i<n:
		yield b;
		a,b=b,a+b;
		i=i+1;

然后产生生成器对象

c=f(5);

接下来需要调用生成器的方法来使用生成器对象,生成器的对象包括 next(),send(),throw(),close

1.next()可以执行一次yield语句,直到结束,例如上面的例子中c.next()可以输出1,再次调用c.next()可以输出2,第三次调用c.next()可以输出3c这个生成器对象最多执行5next(),超过5次时就会产生StopIteration异常。

2.send()方法可以继续执行生成器,并向生成器传入一个值,修改上面的程序

def f(n):
	a,b=1,1;
	i=0;
	while i<n:
		b=yield b;
		a,b=b,a+b;
		i=i+1;

生成一个生成器对象,c=f(5),如果执行c.next(),c.send(5),c.send(6),执行结果是1;6;11

3.throw()方法可以在yield语句出抛出异常,并使得生成器返回下一个生成器函数值,

4.c.close()可以再yield生成器暂停执行的地方产生GerneratorExit从而使得生成器退出执行。如果生成器在调用close()方法之前已经遇到异常,则close()什么也不做。

如产生下面的生成器对象,c=f(5)  然后调用c.close(),再调用c.next()时会产生StopIteration异常,因为生成器对象c已经退出执行了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值