《Python高级编程》 ——速查笔记 第一、二章


这本《Python 高级编程》 是为数不多的python高级编程技巧、知识总结,刚刚读了两章就收获颇丰,在本人博客做MARKDOWN练习以及供未来速查相关资料。

Python高级编程 (速查笔记 第一、二章)

第一章

1. 编译器

  • cPython 目前主要用这个,最新最先进的。
  • Jython Java实现的解释器,方便python调Java类。
  • IronPython .net 环境环境下 类似于jython 。
  • PyPy 汇编练习项目,支持奇怪语法 不实用 。

2. 安装python

可选模块

  • python-dev 编译C时候用到的python头文件
  • python-profiler 非GPL模块 例如hotshot优化器
  • gcc 包含C代码扩展时候用的软件包
  1. 定制python命令行模式下的行为 (略 p10)
  2. setuptools - 类似于python的 apt 工具 安装easyinstall工具时候会安装setuptools,方法
    是下载es_setup.py 使用命令 python es_setup.py setuptools 命令安装工具 在系统terminal
    下使用 easy_install xx 来安装其他包
  3. 使用VIM编辑器 (p19 略)
  4. 使用集成环境 (p19 略)

第二章 语法的最佳实践——低于类级

1. 列表推导式(List comprehensions)

  • 使用“[]”包裹一个生成表达式 例如 [i*2 for i in range(10) if i%3==0 else i*3],生成表达式内可以生成一个列表 (有优化加成,运行速度快)

2. 迭代器 (Iterators)和生成器(generators)

  • 迭代器 类内实现 .next 和 .__iter__ 这两个方法的类,就是迭代器,结束时候.next抛出 StopIteration异常,.__iter__返回这个类的实例。

调用时候使用 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 函数参考链接

3.装饰器(Decorators)

就是一个以函数为参数的函数,其返回值仍然是个函数,作用是增强,或者改变 参数函数的功能。使用装饰器语法使得代码更易读。

  • 使用如下方法 定义一个装饰器
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:语法来得到和释放锁
  • 更多装饰器的资料

4.上下文管理器 (contextlib 和 with)

就是常用的 with file('/demo.txt') as f:...这种就是上下文,实际上就是 try … finally 关闭资源。
定义时候 一个类 实现 __ enter__(self)方法和 __exit__(self,excepion_type,exception_value,excepion_traceback)就可以使用with协议,exit返回true将不抛出异常

  1. contextlib模块 引入from contextlib import contextmanager
    dosomeprepare try: yeild except Exception e : dosomenote rasie e else: dosomeclose 语式来替代enter 和exit语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值