有趣的Python

来源:互联网 发布:搭配软件 编辑:程序博客网 时间:2024/04/30 00:59
 

1. 统一的类型对象系统:对象是对象,类型也是对象。2.2之后,Python引入的所谓的new style class才使得这个特点变得很突出。这里面有两个关键的关系isinstance和issubclass。type对象和object对象之间的关系更显得微妙,但却是descrintro(new style class的别称)的关键。
http://www.python.org/download/releases/2.2.3/descrintro/
http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.pdf

2. 线性化的多继承方法重载链:即所谓的mro, method resolution order, 早先的算法存在bug,2.3以后,Python直接借用了Dylan语言中的C3算法。这个方案虽然并不是一个完美的多继承解决方案,却是在单根对象和多继承之间一个不错的折衷。
http://www.python.org/download/releases/2.3/mro/

3. descriptor protocol系统:这个是Python里面method binding(instance method, class method, static method)和property实现的基础技术。这个技术类似于C++里面的property proxy模式。可以实现对对象属性访问的控制和转发。
http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.pdf
http://users.rcn.com/python/download/Descriptor.htm

4. 名字域和绑定策略:这是Python中对我尚不明朗的一块。主要是官方网站上没找到更深入的分析文章,虽然在Reference manual中有部分解释。看来以后可能得看看Python的源代码实现来搞定它。

5. RC+GC的内存管理策略:大多数情况下,内存的使用不存在循环引用,这时候使用Reference Counting可以及时收回废弃的内存。对于循环引用,采用定期激活GC的模式来进行回收。这是一个不错的折衷方案。值得提到的是,在这个模型下,文件句柄等内核对象也可以被及时自动回收。毕竟任何句柄在语言里面都表现为一个内存对象。不过Python并不鼓励程序员这样做,而是建议使用close来关闭句柄。

6. List Comprehension:一种类似于数学语言的写法。本人很喜欢的一个语法特性。比如[x for x in xrange(1,5,1) if x > 2]。这很容易翻译成数学上的公式:{x|Ax∈xrange(1,5,1), x>2}。非常清晰易懂。

7. 产生式:这要归功于yield语句。对于需要用更复杂的方式描述的集合,使用带yield语句的函数来生成产生式是更好的选择。上面的集合使用产生式可以写成:
def aset():
    for x in xrange(1,5,1):
        if x > 2:
            yield
这个东西其实有些像coroutine了。
http://docs.python.org/ref/yield.html

8. 函数修饰:其实是Python中一个简化编程的特性,有点AOP的味道,但却很有用处。在Python 3000中,还将出现class decorator。缺点是看起来有点丑,而且程序员还需要遵守某些比较细节的规范,这就有点像C++了,这方面的语言特性可能还需要锤炼吧。
http://www.ddj.com/web-development/184406073;jsessionid=0YLUT5ZEZJBFYQSNDLOSKHSCJUNN2JVN?_requestid=27384
http://www.python.org/dev/peps/pep-3129/

9. 有个性的else语句:大多数语言中else只与if匹配。但是Python则允许else与for, while, try匹配。初看好像没什么意思,细品味一下,却觉得这个设计还是很有趣和有用的。

10. ABC:Abstract Base Class,很可惜是Python 3000以后才有的未来特性。很像接口的一个东西。关于它的PEP还没有仔细读过。不过相信是一个非常好的新特性。
http://www.python.org/dev/peps/pep-3119/