Python中closure和generator的定义和使用 (兼谈yield命令)

通常我们都会对大学课程里开设的语言,例如C++、Java等,比较熟悉,而当我们转向学习新的语言时往往会遇到一些新的概念和语言的新用法。这时以前语言中的一些概念会干扰我们对新概念的理解。本文,我要讲的是Python语言中的closure和generator的定义和使用,以方便Python初学者快速理解二者的含义。这两个概念往往是Python初学者感到陌生、困难和不容易理解的。

注意:本文中运行的程序基于Python3.4。

1 Closure

它是一个动态创建的函数并且能够记住自己的来源。要创建一个closure需要一个产生closure的动态机制。一个较简单的产生closure的动态机制是:定义一个函数A,在其函数体中再定义一个inner function B,B直接使用A的形式参数,最后返回函数B。在产生closure的时候,每当改变函数A的实参,就会获取一个不同的closure。讲了那么多,下面看一个简单的例子,让大家有一个感性的认识:
这里写图片描述
上图中红色椭圆圈住的部分就是2个closure。

2 Generator

Generator是Python中的一种序列创建机制。它本身是Python函数的一种使用形式,定义产生generator的函数时要用到yield命令。从单词yield本身的含义来看,generator就是要产生值的。当我们需要一个很大的序列,每次只需要使用序列中的一个值,在这种情况下,我们没有必要将整个序列中的值都存储下来。只要知道这个序列的动态产生机制,我们需要一个就拿出一个,这样不仅高效而且节省内存。这对于设计爬虫软件时,尤为重要,因为爬虫面对的是非常浩瀚的互联网信息。对上述需求,generator函数恰恰能满足。Yield能记住序列值产生的场景,每次产生值的时候能够根据上次产生的值的信息正确地产生出当前需要的值。说了那么多,我们还是要通过下面的例子获取一个generator的感性认识,通过该例子你能够对yield的含义和用法有一个正确的理解。
这里写图片描述
上图中红色椭圆形圈定的部分就一个generator,下面部分展示了generator的使用方法。当然这是一个方便讲解generator概念的简单例子,实际中要产生的序列可能是成千上万。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值