python中的yield
python有yield表达式,它只能用于定义生成器函数,生成器可以控制函数的执行,函数可以再生成器语句出暂停执行,当前使用的变量,堆栈等都会保留,直到下次使用生成器方法。下面是一个yield的例子:
def f(n): a,b=1,1; i=0; while i
然后产生生成器对象
c=f(5);
接下来需要调用生成器的方法来使用生成器对象,生成器的对象包括 next(),send(),throw(),close
1.next()可以执行一次yield语句,直到结束,例如上面的例子中c.next()可以输出1,再次调用c.next()可以输出2,第三次调用c.next()可以输出3,c这个生成器对象最多执行5次next(),超过5次时就会产生stopiteration异常。
2.send()方法可以继续执行生成器,并向生成器传入一个值,修改上面的程序
def f(n): a,b=1,1; i=0; while i
生成一个生成器对象,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已经退出执行了。
上一篇: 如何防止表单重复提交
下一篇: PHP可逆加密/解密函数分享
推荐阅读
-
Python 的多线程是鸡肋?
-
Spring中bean对象的生命周期
-
python--简单的文件断点续传实例
-
如何正确的使用Python解释器?视图详解
-
Java中数组操作 java.util.Arrays 类常用方法的使用
-
在RPA中使用Python批量生成指定尺寸的缩略图!比Ps好用!
-
mysql中if函数的正确使用姿势
-
如何简单地理解Python中的if __name__ == '__main__'
-
FluentValidation在C# WPF中的应用
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)