Python常见问题及资料收集


 

1,字符编码处理: http://bbs.chinaunix.net/thread-1431029-1-1.html


 

2,List/Queue/deque/queue

  • queue是多线程中的,使用的栈;由于有全局计时器锁的存在,多线程并不能改善程序性能;线程安全(GIL保证)。
  • multiprocessing.Queue是Python2.6版本引入的,用于实现多线程的一种高性能栈;线程和进程安全。
  • collection.deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,插入和删除性能完胜queue和Queue,使用c语言实现;线程安全(GIL保证)。

 


3,yield和generator

  • generator(生成器),是一个特殊的程序,可以被用作循环的迭代行为。类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是不同于一般都函数会一次性返回所有数值的数组,生成器一次只产生一个值,这样消耗的内存大大减小,而且允许调用函数可以很快的开始处理前几个返回值。因此,生成器看起来像一个函数,但是表现像一个迭代器。
  • 生成器与迭代协议是密切相关的
  • python提供了两种基本方式来构造生成器:
    • 生成器函数:也是用def来定义,利用yeild关键字一次返回一个结果,阻塞,重新开始。为了支持迭代协议,拥有yeild的函数会被编译成生成器,这类函数被调用时返回一个生成器对象,这个对象支持迭代接口,即成员方法__next()__继续从中断处执行。 
      • # coding
        
        def cube(n):
            for i in range(n):
                yeild i ** 3
        
        for i in cube(5):
            print i
        
        # output
        0
        1
        8
        27
        64
    • 生成器表达式:返回一个对象,这个对象只有在需要的时候才产生结果  
      •  

        >>> # 列表解析生成列表
        >>> [ x ** 3 for x in range(5)]
        [0, 1, 8, 27, 64]
        >>> 
        >>> # 生成器表达式
        >>> (x ** 3 for x in range(5))
        <generator object <genexpr> at 0x000000000315F678>
        >>> # 两者之间转换
        >>> list(x ** 3 for x in range(5))
        [0, 1, 8, 27, 64]
        >>> # 使用for循环自动发出next()函数,实现自动迭代
        >>> for n in (x ** 3 for x in range(5)): 
              print('%s, %s' % (n, n * n))
        
        0, 0
        1, 1
        8, 64
        27, 729
        64, 4096
        >>> 
        

          

  • 比较。一个迭代器既可以被写成生成器函数,也可以被写成生成器表达式,均支持自动和手动迭代。而且这些生成器只支持一个active迭代,也就是说生成器的迭代器就是生成器本身。

 


4,协程、Gevent、Greenlet


 

5,multiprocessing、threads实现的并行比较

 

posted @ 2015-05-20 11:03  梦溺残沙里  阅读(285)  评论(0编辑  收藏  举报