IronPython的第五块鳞片

文章介绍了IronPython的开发情况,开发者Jim加入MS后精力分散,现寻求参与开发的程序员,1.0开发提上日程。还提到将用来自.Net2.0的LCG机制实现代码生成。此外,10月Mail List指出IronPython存在in运算符对字符串和Tuple实现有问题等bug。

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

        不知不觉就到了十月份,IronPython这条小蟒蛇也很久没跟大家say Hi了,不过与它老爸Jim从Mail List乃至他的个人blog中消失的时间相比,确实是算不了什么。今天去看了一下Mail List和Jim的blog,很意外的在Mail List中看到了Jim熟悉的名字。
        在这篇久违的Message中,Jim也承认自己自从加入了MS之后,很多事情让他费神以致于不能专注到开发中来。同时,也刊出了一个求贤启事,寻求能够参与IronPython开发的程序员,看来IronPython1.0的开发已经提上日程了。在Jim的另外一个Message中,我看到了一个于我而言的新词汇 :LCG(Lightweight Code Generation),而这个新特性则是来自.Net2.0/Whidbey。由于LCG与Reflection相比的一个最大的优势就是,生成的方法所使用的内存是可以被回收的,IronPython1.0中会使用这样的机制去实现代码生成,也就是会在一定程度上替代AssemblyBuilder。有兴趣的话,可以从Mail List中获得更具体的信息。MSDN Blog上还有一篇讲LCG的post
        10月份的Mail List中还提到了不少关于IronPython的bug,譬如in运算符。在IronPython中,in运算符对于两种Python特有的Data type:Dictionary,List而言,实现是OK的,但是对于字符串和Tuple则是存在问题。我们在Interactive的环境下进行测试:

None.gif>>> "ab" in "abc"
None.gifFalse
None.gif
None.gif
>>> t = (1,2,3 )
None.gif
>>> 3 in  t
None.gifTrue
None.gif
None.gif
>>> 4 in  t
None.gifFalse
None.gif
None.gif
>>> "s" in  t
None.gifTrue

从以上的结果,我们可以发现第一个和最后一个in运算符返回的结果都是有问题的。而这些在CPython下都能得到正确的结果。
       细心的你一定会从上面看到三种比较特殊的Data Type:Dictionary,List和Tuple。下面就简单的说说这三种数据类型。首先是Dictionary,它跟HashTable很类似,是由Key/Value pair(键值对)组成,不支持直接的下标形式的访问,但是可以通过key得到相应的value。如下所示:
  
 >>> d = {"first":1,"second":2}
 >>> d["first" ]
 1
None.gif
None.gif
>>> d["third" ]
None.gifTraceback (most recent call last):
None.gif  File 
"<stdin>", line 1in ?
None.gifKeyError: 
'third'
None.gif

当key错误的时候,在CPython下是会有如上的错误信息,IronPython面对这个错误的时候就是无言以对,什么都没有提示,让人莫名其妙。
        接着就是List,它跟数组是很类似的,支持直接的下标形式的访问,同时也很容易的访问并生成sub List。如下所示:
None.gif>>> l = ["first""second""third" ]
None.gif
>>> l[0 ]
None.gif
'first'
None.gif
None.gif
>>> l.append("fourth" )
None.gif
>>>  l
None.gif[
'first''second''third''fourth' ]

 >>> l.insert(2,"middle")
 >>> l
 ['first''second', 'middle', 'third''fourth']
 
 >>> l.remove("middle")
None.gif>>> l
 ['first''second''third''fourth']

None.gif
>>> l[0:2 ]
None.gif[
'first''second' ]
None.gif

通过append,insert和remove等方法可以轻松地改变List中的内容,同时通过:运算符也容易得到Sub List,十分的灵活。
        最后就是Tuple了,它跟List很象,最重要的不同就是它是Immutable的。同时,访问Tuple的速度要比访问List快,而且,Tuple本身是不可变的,因此Tuple就与Constant类似了。如下所示:

None.gif>>> t = ("first""second","third" )
None.gif
>>> t[0 ]
None.gif
'first'
None.gif
None.gif
>>> t.append("fourth"// Error
None.gif
>>> t.remove("second"// Error

         上面简要的介绍了一下Python中比较特殊的三种Data Type,有兴趣的朋友可以从Dive Into Python中得到更多的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值