摘选改善Python程序的91个建议2

 
 62、metaclass
  stackflow          中文翻译
 
 63、Python对象协议
   https://zhuanlan.zhihu.com/p/26760180
 
 
 65、Python的迭代器协议
  
    iter(可迭代对象)-->返回迭代器iterator

调用:调用一次返回一个元素,当最后一个元素返回后,再次调用时,抛出StopIteration 异常
  iterator.__next__()
  或 next(iterator)
设计可迭代对象
上面的看起来没意义

 

66、生成器

  生成器,顾名思义,就是按一定的算法生成一个序列。

  迭代器虽然在某些场景表现得像生成器,但它绝非生成器;反而是生成器实现了迭代器协议的,可以在一定程度上看作迭代器。

生成器函数

生成器还有两个很棒的用处:

  实现 with 语句的上下文管理协议,利用的是调用生成器函数时函数体并不执行,当第一次调用 next() 方法时才开始执行,并执行到 yield 表达式后中止,直到下一次调用 next() 方法这个特性;

  实现协程,利用的是 send()、throw()、close() 等特性。

生成器

 

88、

  需要注意的是,Linux 平台上 multiprocessing 的实现是基于 C 库中的 fork(),所有子进程与父进程的数据是完全相同,因此父进程中所有的资源,如数据结构、打开的文件或者数据库的连接都会在子进程中共享。但 Windows 平台上由于没有 fork() 函数,父子进程相对独立,因此保持了平台的兼容性,最好在脚本中加上 if __name__ == "__main__" 的判断,这样可以避免出现 RuntimeError 或者死锁。

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
a

https://stackoverflow.com/users/14648/jerub

posted @ 2018-11-16 16:27  web123  阅读(145)  评论(0编辑  收藏  举报