可选模块
python-dev 编译C时候用到的python头文件python-profiler 非GPL模块 例如hotshot优化器gcc 包含C代码扩展时候用的软件包 定制python命令行模式下的行为 (略 p10)setuptools - 类似于python的 apt 工具 安装easyinstall工具时候会安装setuptools,方法 是下载es_setup.py 使用命令 python es_setup.py setuptools 命令安装工具 在系统terminal 下使用 easy_install xx 来安装其他包使用VIM编辑器 (p19 略)使用集成环境 (p19 略)调用时候使用 xxx.next() 模式来使用,或者 用for in 遍历 (句柄短,处理本函数耗时少)
生成器 一个函数使用 yeild 返回句柄,调用该方法返回值就是一个特殊的迭代器,它就是生成器 (缩短句柄,类似管道操作)(详细见 p29)还可以用 somevar=(yeild) 模式来使用 .send(var) 代替.next() 给生成器内传递参数,并返回值
协同程序 使用 生成器 构造函数中 使用try except finally 语法写的,带.send .带close 那种生成器
生成器表达式 就是列表推导式中的[]方括号 改成()圆括号
itertools 模块 (构造各种生成器)
islice: 窗口迭代器 itertools.islice(可迭代对象,阈值,参数2默认None) 返回迭代器 就像在一个列表中的滑动窗口。tee: 往返迭代器 itertools.tee(可迭代对象) 返回多个相同的迭代器,由于tee内部是缓存机制(一个迭代对象被消耗完 ,多个迭代器会同时被增加新值)适用于交替迭代和同步迭代,不适合依次迭代(消耗过多内存)。参考资料groupby 类似于 unix中的uniqitertools.groupby(可迭代对象) 是一个同时返回两个值的迭代器,第一个值是KEY 第二个值是被分组好的可迭代对象 (P36)其他itertools 函数参考链接就是一个以函数为参数的函数,其返回值仍然是个函数,作用是增强,或者改变 参数函数的功能。使用装饰器语法使得代码更易读。
使用如下方法 定义一个装饰器 def mydecorator(function): def _mydecorator(*arg,**kw): # 加入函数运行前做的事(AA) res = function(*arg,**kw) # 加入函数运行前做的事(BB) return res return _mydecorator还可以在这个上面再包一层,让装饰器带函数 详见(p39)
参数检查 包裹层 用 in out 承载输入输出类型,函数运行前,检查传入函数与输入类型是否符合, 函数结束后,检查函数输出值是否与输出类型相同。不符合raiseError 在全局记录相关映射表格,可以查看RPC调用是否合法。(P41)缓存 利用hash算法 记录函数名 传入参数的哈希值,当做KEY,设定 value 和 time(判断过期与否) 两个值,下次访问命中就返回缓存之,否则调用函数并,更新缓存。(注意多级包装需要在调用时候添加括号)p43代理 例子是用包裹层传递该函数所需要的的权限,利用 globals().get() 拿到当前user信息,比对用户的roles跟程序比对,如果不符合raise exception(p45)上下文提供者 例如使用threading.Rlock 使用装饰器 并用 try: finally:语法来得到和释放锁更多装饰器的资料就是常用的 with file('/demo.txt') as f:...这种就是上下文,实际上就是 try … finally 关闭资源。 定义时候 一个类 实现 __ enter__(self)方法和 __exit__(self,excepion_type,exception_value,excepion_traceback)就可以使用with协议,exit返回true将不抛出异常
contextlib模块 引入from contextlib import contextmanager 用 dosomeprepare try: yeild except Exception e : dosomenote rasie e else: dosomeclose 语式来替代enter 和exit语句