首页 > 代码库 > Python高级编程

Python高级编程

List Comprehension

1.列表推导    [i for i in range(10) if i%2 == 0]      -> [0, 2, 4, 6, 8],   i也可以是一个函数,该风格比C语言思想的代码风格效率高

2.enumerate   取到了序列中的序列号好内容

for index, item in enumerate(sequence):
    process(index, item)

迭代器:   要创建定制的迭代器,可以编写一个具有next方法的类,只要该类能够提供返回迭代器实例(self)发__iter__特殊方法

    基于方法:next  返回容器的下一个项目    i.next()

                     __iter__  返回迭代器本身    i = iter(‘abc‘)

生成器:基于yield指令,可以暂停一个函数并返回中间结果,该函数将保存执行环境并可以在必要时恢复,不能有return,yield这与return的情况不同。return是真正的离开代码块,所以会在return时立刻执行finally子句而yield不会。

               yield将返回一个generator对象,为一个特殊的迭代器

              send,send的工作机制与next一样,但yield将变成能够返回传入的值,   实例.send("***")       value = http://www.mamicode.com/(yield) 可以根据客户端代码来改变其行为

              throw,close    实例.throw() 传入要抛出的任何类型的异常    这个方法用于关闭生成器。对关闭的生成器后再次调用next或send将抛出StopIteration异常。

协同程序(Trampoline, multitask, cintextlib, greenlet):可以挂起/恢复,并且有多个进入点的函数,类似线程,但不用资源锁,生成器几乎就是协调程序

生成器表达式:(x**2 for x in range(10) if x%2 == 0)

好文介绍:http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html

itertools模块:包括islice,tee,groupby模式

装饰器:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

           包括编写装饰器,参数检查,缓存,代理,上下文提供者

with和contextlib      

举例:  with file(‘path‘) as hosts:

                ........

             可替代:

            hosts = file(‘path‘)

            try:

                   .......

           finally:

                hosts.close()

 

Python类:

    避免多重继承

    super必须使用一致,都是用super或不是用super

    不要混用老式和新式类

    调用父类时必须检查类层次

 

类描述符:自定义在引用一个对象上的特性时所应完成的事情

     描述符类必须实现三个方法:

        __set__,__get__, __delete__