Python 3程序开发指南(第2版 修订版)笔记

时间:2021-11-05 19:03:09

Python 3程序开发指南(第2版 修订版)

目录

过程型程序设计快速入门

  1. for in
  2. try except as

数据类型

  1. sys.float_info.epsilon
  2. seq[start:end]实际上代表[start, end)区间,s[:]相当于s[0:len(s)]
    1. 不一致:当使用负数step时,start默认为-1:s[::-2]
  3. strTemplate.format(agr0, arg2, name1=value1,...)
    1. {0} {1} {2} ...
    2. {name1} {name2} ... //混用时编号参数在前面,命名参数放到后面
    3. 使用当前作用域范围内的局部变量? **locals() //locals()返回一个字典,**将其拆分

组合类型

  1. 序列:bytearray、bytes、list、str、tuple
    1. collections.namedtuple
    2. 列表拆分:first, *rest = [1,2,3,4]
    3. 列表理解:[expr for i in L]
  2. 集合:set
    1. 集合理解:{expr for i in s}
  3. 映射:3.0 dict、collections.defaultdict,3.1 collections.OrderedDict
    1. setdefault:防止d[k]+=1这样的语法第一次调用时抛出KeyError

控制结构与函数

模块

OOP

文件处理

  1. bytes.fromhex ?
  2. f.seekable()

高级程序设计技术

  1. 生成器:实现者使用yield惰性返回,调用者for in获取之
    1. 重置当前值:generator.send(val), val作为yield表达式的结果接受
  2. 动态导入模块:最原始的方法
    1. code = open(filepath, "r", encoding="utf8").read()
    2. module = type(sys)(name)
    3. sys.modules[name] = module
    4. exec(code, module.__dict__)
  3. 装饰器:高阶函数,original_func --> wrapped_func(这里一个主要的理解障碍在于*args, **kwargs参数的语法)
    1. 函数注释:__annotations__
  4. Functor:__call__
  5. 上下文管理器:with expr as var: suite
    1. expr返回的结果必须实现__enter__ __exit__,如open()返回的文件对象
  6. 描述符*:__get__ __set__ __delete__
    1. __slots__ = ()
  7. 类修饰器:class --> class'
    1. nonlocal
  8. ABC(抽象基类)
  9. 元类(?)

FP

  1. functools.partial
  2. @coroutine:为协程调用内置的next(),使其执行到第一个yield处并等待
    1. 构成流水线*

调试、测试与Profiling

  1. p366 Python 3的优点之一是区分str与bytes?
  2. Python 3.0异常链的支持:raise NewException(...) from err

进程与线程

网络

数据库

正则表达式

  1. 负前瞻:(?!e)
  2. m.span(g):返回组g在文本中匹配的起始接受索引位置(start,end)

分析简介

PyParsing

  1. 要素:Literal()、Supress()、Keyword()(必须全词匹配)
    1. Word("abc")匹配abacus?
    2. CharsNotIn() SkipTo() Regex()
    3. Forward() 空的要素?
  2. 量化:Optional()、ZeroOrMore()、OneOrMore()、Group()、Combine()
  3. 处理BNF的惯用法:
    1. 不要写成item | Empty(),而是Optional(item)
    2. 变量列表:var_list = variable + ZeroOrMore(Supress(",")+variable)
  4. 设置动作:.setParseAction(lambda tokens: ...)
  5. 分析一阶逻辑*:
    1. 例:(forall x: exists y: true) -> true & ~true -> true
    2. ParseElement.enablePackrat()

PLY

  1. t_TOKENNAME p_bnf_rule ...

GUI