yield关键字

一直没有搞懂yield关键字是干什么的,今天看到了一篇名为"a generator-based XML reader"的文章,中间的程序有用到了yield,于是决定把它弄懂。

yield最早是在python2.2中被引入的,该版本必须Enable generator才能使用yield,在后来的python2.3中把generator的默认改为Enabled。也就是说不用使用from __future__ import generators。引入这个新关键字的原因是,生产者函数(Producer Function)在必须保留函数状态的时候,不得不把回调函数(Callback Function)作为生产者函数的参数传入,这样增加了编写程序的难度和程序本身的效率。

在函数体中使用了yield关键字的,被称为发生器函数(Generator Function)。该函数和普通函数不同的是,被调用的时候只是传进函数的参数,而并不执行任何函数体的代码。真正的执行是在,发生器的迭代器(Generator Iterator)调用了.next()方法以后才开始,直到遇到yield(这时函数体的局部状态将全部保留,包括局部变量,内部堆栈,instruction pointer,并将yield后面的expr_list返回给调用它的迭代器)或者return(发生器函数的return不能返回任何值,没有什么原因,只是目前python只作了这样的实现),或者函数体本身的结束,这次执行才被终止。

可爱的Python有一些简单的介绍:http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/charm-20/index.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值