标准库概览

标准库概览

以下是一些 Python3 标准库中的模块:

  • os 模块:os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。

  • sys 模块:sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。

  • time 模块:time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。

  • datetime 模块:datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。

  • random 模块:random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。

  • math 模块:math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。

  • re 模块:re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。

  • json 模块:json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。

  • urllib 模块:urllib 模块提供了访问网页和处理 URL 的功能,包括下载文件、发送 POST 请求、处理 cookies 等。

操作系统接口

os 模块提供了不少与操作系统相关联的函数,例如文件和目录的操作。

建议使用 import os 风格而非 from os import *,这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()

在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用:

  1. dir() 函数可以列出模块中的所有可用函数和变量。

  2. help() 函数可以查看模块的文档字符串,以及每个函数和变量的用法。

文件通配符

glob 模块提供了一个函数用于从目录通配符搜索中生成文件列表:

命令行参数

sys 模块提供了一个 argv 变量,它是一个包含命令行参数的列表。

通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。例如在命令行中执行 “python demo.py one two three” 后可以得到以下输出结果:

1
2
3
import sys

print(sys.argv)

错误输出重定向和程序终止

sys 还有 stdin,stdout 和 stderr 属性,即使在 stdout 被重定向时,后者也可以用于显示警告和错误信息。

  1. sys.stderr.write() 函数用于输出错误信息。

  2. sys.exit() 函数用于终止程序。

数学

  1. math 模块提供了许多数学函数,例如三角函数、对数函数、指数函数、常数等。

  2. random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。

访问互联网

有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:

1
2
import urllib.request
import smtplib

日期和时间

datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。

1
import datetime

正则表达式

re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。

1
import re

JSON

json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。

1
import json

数据压缩

以下模块直接支持通用的数据打包和压缩格式:zlibgzipbz2zipfile,以及 tarfile

测试模块

开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试

doctest 模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。

测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中

通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

unittest 模块不像 doctest 模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests