IronPython0.9.2发布了 —— Generator Expression简介

9月22日IronPython 0.9.2发布,可在Workspace下载。该版本修复诸多bug,有两个重要改进,支持Generator Expressions和Decorators。Generator Expressions是Python 2.4新特性,能减少内存开销,还提供iterator功能。

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

        又是时候来关注一下IronPython开发的进展了。上个星期四(9月22日),IronPython0.9.2发布了,大家可以在Workspace中下载到这个最新的版本。我们从Workspace首页上那长长的List of fixed bugs可以看出,这次新版本的发布可谓进步不小啊!IronPython0.9.2除了修复了很多bugs之外,还有两个非常重要的改进:支持了Generator Expressions(PEP 289)Decorators for Functions and Methods(PEP 318)
        Generator Expressions和Decorators都是在Python2.4才支持的新特性。其中Generator Expression是一个容易理解的概念,从字面去看你或许就能猜出它的作用是什么。在探讨Generator Expression之前,我们先来看一个很简单的例子:

None.gif>>> l = [x*2 for x in range(5 )]
None.gif
>>>  l
None.gif[
02468 ]
None.gif
>>> sum([x*2 for x in range(5 )])
None.gif
20   "虽然你只需要一个总和,但是这种方式仍然会在内存中创建一个完整的list"
None.gif


在这个例子当中,变量l是List类型,它的item则依据中括号里面的表达式来生成。通过这样的方式,我们可以很轻松地创建我们所需要的对象集合。其实,中括号里面的表达式就是一个Generator Expression,但是在Python2.4以前,并不存在Generator类型,因此Generator Expression只是生成List item过程的中间产物,我们并没有办法去引用它。再回到以上的例子中来,这种生成list item的方式虽然方便,但是在很多时候并不高效,因为你不一定需要一个完整的list,你可能需要的是list中某几个item或者说某个生成数列的和(如例子中的最后一个表达式)。你可以设想一下,如果表达式中的range激增至数千,不管你是否需要一个完整的list,这样的方式都会在内存中为你创建之,你会不会觉得这样做真的很浪费内存呢?在这样的背景下,Generator Expression就应运而生了。定义一个Generator Expression的方式很简单,将以上例子中的中括号换成小括号即可:

None.gif>>> g = (x*2 for x in range(5 ))
None.gif
>>>  g
None.gif
<generator object at 0x000000000000002F>
None.gif
>>>  sum(g)
None.gif
20


现在g的类型就是Generator了,然后调用sum函数获得该数列的总和,而在这个例子当中并没有创建一个完整的list。Generator Expression不仅减少了内存的开销,还提供iterator的functionality,我们可以通过调用next()方法来获得由generator生成的item。例如:

None.gif>>> g = (x*2 for x in range(5 ))
None.gif
>>>  g.next()
None.gif
0
None.gif
>>>  g.next()
None.gif
2
None.gif
>>>  g.next()
None.gif
4

       
        Generator Expression的特性就讲到这里了,而Decorators是一个比较复杂的概念,偶了解得也颇少,就不在这里作探讨了。再罗嗦一句,Decorators可是Python中一个非常有用的特性哦,有兴趣的朋友不妨去研究一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值