Python 模块学习计划

前言

之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络。读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库。
这里呢就列个小清单,把我认为有必要学习的库写一下。(前天也写了两篇关于 Python 模块的代码,不过基本算是我的需求,不算必要。这里写的是必须要会的,不冲突。)

系统

  1. sys

    用于访问一些由 Python Interpreter 维护的变量,一般都和系统、流、命令行参数之类的相关。

  2. os

    用于使用一些操作系统相关的函数。(相关:比如 os.fork 在 windows 上就用不了)

  3. subprocess

    系统调用函数,目的在于取代 os.system 和 os.spwan* 的库,并提供更强大的功能。

  4. pyinvoke: 3rd

    fabric2 的本地方法调用模块,比 subprocess 更强大。

文件路径

  1. pathlib

    该模块使用类来表示系统路径,而且是操作系统无关的。终于不需要去管 Windows 和 Linux 下分隔符的差别了。
    更方便的是,路径之间的组合可以直接通过“计算”实现。

  2. glob

    glob 是指 linux shell 用来匹配文件路径的一种简化正则表达式。这个库也是同样的功能,会返回匹配到的所有路径名,顺序任意。

字符串处理

  1. re

    正则,不解释

  2. io.StringIO io.BytesIO

    提供了一个 str 流对象,可读可写。API 等同于 open() 返回的流对象。类似 Java 的 StringBuffer BytesBuffer

网络库

  1. requests: 3rd

    超易用的 http 库,被称为神器。。

  2. urllib

    网络协议处理的标准库(说网络协议,自然不仅 http 了)

依赖管理、环境隔离

  1. pipenv

    环境管理和依赖管理的终极解决方案

  2. pip

    依赖管理工具,install uninstall list 都不会用还敢叫 Python 程序员?

  3. setuptools

    项目打包工具

Python 的依赖管理工具,曾经很混乱。不过现在算是越做越好了。更多的信息参见Python Packaging User Guide

迭代器、数据结构、高阶函数

  1. itertools
  2. colletions
  3. functools

这几个模块都和可迭代对象(列表、集合等)有关,熟悉了应该可以大大改善 Python 使用姿势。

日志

  1. logging

测试

  1. unittest

    官方测试框架,和 Junit 师出同门。缺点是繁琐。

  2. pytest: 3rd

    看到很多热门开源项目都用的 pytest,有时间得学一下。(包括 pipenv pip virtualenv 等)

  3. mock: 3rd

    使用最多的替换掉网络请求的方式,几乎所有场景下都可以用。所有网络请求和 rpc 调用等都可以用 mock.patch 来模拟返回值。
    就像用Java的Mockito一样。

序列化

  1. pickle

    一个对数据进行 object 和 bytes 之间的转化的模块。如果你只需要使用 Python 读取这些数据,用 pickle 会是个很好的选择。

  2. json

    和 pickle 很类似,不过它做的是 object 和 json 之间的转化。
    这个模块在网络开发中用得很多。

并发并行

  1. multiprocessing

    多进程,由于 GIL 的存在,计算密集型工作用多线程基本没用,这时就需要这个库,或者用 C API.
    另外因为多进程不共享数据,因此需要使用 Queue 或者 Pipe 通信。

  2. threading

    API 和 multiprocessing 非常类似,但是要搞清楚关键区别:一个是进程一个是线程。

  3. multiprocessing.dummy

    API 完全等同于 multiprocessing, 但是它实际上是一个 threading 库的封装。(也就是说是多线程的)
    那为啥要标重点呢?如果一个功能你不确定用多进程还是多线程,那就用 multiprocessing 的 API 写,然后用 dummy 的多线程和原生的多进程比较,哪个快就用哪个。这样需要改的只是一个导包语句。

异步I/O

  1. asynico

    一个利用协程(Coroutines)编写单线程并发程序的标准库,使用asyncawait

协程可相当于轻量级线程,几乎可以完全替换掉 Python 的多线程。虽然暂时还是雷声大雨点小,很值得一学。

其他

1. 爬虫

现在 Python 爬虫这么火,感觉也算是必备的了。

  1. Selenium + PhantomJS 模拟浏览器的访问行为,可以绕过许多复杂的反爬虫机制。缺点是开销大,不适合大量抓取。
  2. BeautifulSoup html 解析器

其他标准库

  1. random
  2. time

猜你喜欢

转载自www.cnblogs.com/kirito-c/p/9098270.html