IronPython的第四块鳞片

作者关注Jim的blog和IronPython的Mail List无果,决定自行摸索。介绍了Python与Java在“Everything is Object”概念上的不同,如Python可单独定义function且其为对象,还说明了函数的document string规则。同时指出IronPython在Interactive模式有bug,其built - in属性与Python不完全兼容。
        尽管每天都会关注Jim的blog,关注IronPython的Mail List,但是这几天来都没有什么收获,不仅Jim的blog都快发霉了,Mail List这两三天竟然也没有新的Mail,让我好生失望。看来一切的东西都得靠自己去摸索了,原本想拿着IronPython的源代码研读一番,怎奈天生愚钝,《Code Reading》那本好书又没有带在身上,看代码如同在蜀道行走一般。看来从Python本身入手,并穿插与IronPython的比较或许更加切合我的实际水平了。
        今天先来说一点Python与其他语言不同的地方。Python也和Java一样,号称Everything is Object,但是两者在概念上却是有很大的不同。首先,Java所谓的Everythins is Object就是所有的代码都必须以类的形式出现,而Python则不是,Python可以定义单独定义function,但是每个function却是实实在在的Object。大家看以下的代码:    
None.gif>>>def HelloWorld():
None.gifdot.gif     
""" Say "Hello,World"
None.gif
dot.gif         Say "Hello,World" again """
None.gif
dot.gif
None.gif
>>> print HelloWorld.__doc__         # 这样的调用方式不就是对一个对象中的属性进行访问吗?
        以上仅仅是定义了一个空的函数,但是函数体中包含了该函数的document。一个函数的document string必须出现在函数名称后面的第一行,也就是在函数名与document string之间不能有任何的代码;除此之外,必须使用三个"来定义作为document string的范围。实质上每一个function被定义之后,都会包含许多built-in的属性,__doc__就是其中的一个,以上的代码在解释执行的时候,就会将两个"""之间的字符串赋给__doc__属性。除了__doc__属性之外,一个function还有很多其他的built-in属性,我们可以通过dir(funtion name)来获得。
        以上代码在Python下是没有问题,但是IronPython却让我很是失望,它在Interactive的模式下只能够支持单行的document string,如果像以上的多行的方式,则会陷入一个死循环,直至抛出System. IndexOutOfRangeException: Index was outside the bounds of the array。但是如果将以上代码存为.py文件,通过IronPythonConsole *.py的方式来执行,则是没有问题的。看来IronPython的Interactive方式还存在着很多的bug。同时,通过dir(function name)也可以发现IronPython中的built-in属性并没有与Python完全兼容,缺少了很多属性,同时也增加很多新的属性:如'Call','Equals', 'GetHashCode', 'GetMethod', 'GetType', 'ToString'等。
        今天就先到这里了,大家会不会觉得有点无趣呢?看来我得检讨一下,然后再来点能吸引眼球的了。
        Any proposal is welcome.Thanks!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值