Python 进阶

来源:互联网 发布:西绪福斯 知乎 编辑:程序博客网 时间:2024/06/11 23:03

Python 进阶

  1. Python 的惯例和规范

    1. PEP8
    2. not xx in yy vs xx not in yy
    3. a not is b vs a is not b
    4. 下划线 _
    5. 命名惯例
      • 类名: 首字母大写
      • 函数名: 小写字母,下划线连接
      • 全局变量: 大写, 且在开头声明
      • 普通变量: 小写
    6. 一个函数只做一件事情,并把这件事做好
    7. 函数名必须有动词,最好是 do_something 的句式,或者 somebody_do_something 句式
  2. Python 的赋值和引用, ==is, copy, deepcopy

  3. 迭代器, 生成器, itertools, yield, 列表/字典/集合的推导

  4. method, classmethodstaticmethod

  5. Python 魔术方法

    1. __str__, __repr__
    2. __new____init__
    3. 比较运算、数学运算
    4. 容器方法:__len__, __iter__, __contains__, __getitem__, __setitem__, __missing__
    5. __call__
    6. with: __enter__, __exit__
    7. __setattr__, __getattr__, __getattribute__, __dict__
    8. __set__, __get__
    9. __slots__ 和内存优化
  6. Python 性能之困

    1. Profile,timeit
    2. GIL 全局解释器锁
    3. 瓶颈在哪里:
      • 计算密集型: 用 C 语言补充
      • I/O 密集型: 多线程 / 多进程 / 协程,阻塞 -> 非阻塞, 同步 -> 异步
    4. 什么是同步、异步、阻塞、非阻塞?
    5. 什么是进程、线程、协程?
      • 进程: 资源消耗大,系统整体开销大,数据通信不方便
      • 线程: 资源消耗小,可共享数据。上下文开销大。按时间片强制切换,不够灵活
      • 协程: 上下文切换开销更小,内存开销更小。可根据事件切换,更加有效的利用 CPU
    6. 事件驱动 + 多路复用
      • 轮询: select, poll
      • 事件驱动: epoll 有效轮询
    7. Greenlets / gevent / asyncio
    8. 线程安全, 锁
      • 获得锁之后,一定要释放,避免死锁
      • 获得锁之后,执行的语句,只跟被锁资源有关
    9. gevent
      • gevent.sleep 非阻塞式等待
      • Queue 协程间数据交互,避免竞争
  7. 装饰器

    • 检查、预处理
    • 缓存
    • 其他
    • 闭包 (TODO: 其他例子)
  8. 一些技巧和误区

    1. 格式化打印 json
    2. 确保能取到有效值
      • x.get(k, dft)
      • d.setdefault
      • defaultdict
      • a or b
    3. try…except… 的滥用
    4. 利用 dict 做模式匹配
    5. inf, -inf, nan
    6. *args, **kwargs, foo(x, y, *, z, **kwargs), 强制显式参数 *
    7. pyenv, venv, 命名空间
    8. property
    9. 要批量修改、存取,避免循环内单步获取:for range(): db.get() vs db.mget()
    10. 三元运算: x = a if foo() else b
    11. else 字句: if, for, while, try
    12. foo(a, b=[])
    13. collections
      • defaultdict
      • namedtuple
      • Counter
  9. 项目中的代码管理

    1. venv
    2. 代码结构管理,目录树
    3. git
      • clone
      • status
      • add
      • commit
      • push
      • pull
      • merg
      • checkout
      • branch
  10. 补充

    1. history|sort|uniq
    2. django, blog
      1. 写文章
      2. 看文章
      3. 查看文章列表
      4. 根据题目搜索文章
      5. 可以评论
    3. 分享一些图书
  11. HTTP 状态码

    • 500 服务器内部错误
    • 502 网关错误
    • 404 找不到页面
    • 403 拒绝访问
    • 303 重定向
    • 302 重定向
    • 200 OK