python 各模块

Posted 牛状

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 各模块相关的知识,希望对你有一定的参考价值。

  1. 01 关于本书
  2. 02 代码约定
  3. 03 关于例子
  4. 04 如何联系我们
  5. 1 核心模块
    1. 11 介绍
      1. 111 内建函数和异常
      2. 112 操作系统接口模块
      3. 113 类型支持模块
      4. 114 正则表达式
      5. 115 语言支持模块
    2. 12 _ _builtin_ _ 模块
      1. 121 使用元组或字典中的参数调用函数
        1. 1211 Example 1-1 使用 apply 函数
        2. 1212 Example 1-2 使用 apply 函数传递关键字参数
        3. 1213 Example 1-3 使用 apply 函数调用基类的构造函数
      2. 122 加载和重载模块
        1. 1221 Example 1-4 使用 _ _import_ _ 函数加载模块
        2. 1222 Example 1-5 Plug-in 例子
        3. 1223 Example 1-6 使用 _ _import_ _ 函数获得特定函数
        4. 1224 Example 1-7 使用 _ _import_ _ 函数实现 延迟导入
        5. 1225 Example 1-8 使用 reload 函数
      3. 123 关于名称空间
        1. 1231 Example 1-9 使用 dir 函数
        2. 1232 Example 1-10 使用 dir 函数查找类的所有成员
        3. 1233 Example 1-11 使用 vars 函数
      4. 124 检查对象类型
        1. 1241 Example 1-12 使用 type 函数
        2. 1242 Example 1-13 对文件名和文件对象使用 type 函数
        3. 1243 Example 1-14 使用 callable 函数
        4. 1244 Example 1-15 使用 isinstance 函数
        5. 1245 Example 1-16 使用 issubclass 函数
      5. 125 计算 Python 表达式
        1. 1251 Example 1-17 使用 eval 函数
        2. 1252 Example 1-18 使用 eval 函数执行任意命令
        3. 1253 Example 1-19 安全地使用 eval 函数求值
      6. 126 编译和执行代码
        1. 1261 Example 1-20 使用 compile 函数检查语法
        2. 1262 Example 1-21 执行已编译的代码
        3. 1263 Example 1-22 简单的代码生成工具
        4. 1264 Example 1-23 使用 execfile 函数
        5. 1265 Example 1-24 hellopy 脚本
      7. 127 从 _ _builtin_ _ 模块重载函数
        1. 1271 Example 1-25 显式地访问 _ _builtin_ _ 模块中的函数
      8. 13 exceptions 模块
        1. 1301 Example 1-26 使用 exceptions 模块
      9. 14 os 模块
        1. 141 处理文件
          1. 1411 Example 1-27 使用 os 模块重命名和删除文件
        2. 142 处理目录
          1. 1421 Example 1-28 使用 os 列出目录下的文件
          2. 1422 Example 1-29 使用 os 模块改变当前工作目录
          3. 1423 Example 1-30 使用 os 模块创建删除多个目录级
          4. 1424 Example 1-31 使用 os 模块创建删除目录
        3. 143 处理文件属性
          1. 1431 Example 1-32 使用 os 模块获取文件属性
          2. 1432 Example 1-33 使用 os 模块修改文件的权限和时间戳
        4. 144 处理进程
          1. 1441 Example 1-34 使用 os 执行操作系统命令
          2. 1442 Example 1-35 使用 os 模块启动新进程
          3. 1443 Example 1-36 使用 os 模块调用其他程序 Unix
          4. 1444 Example 1-37 使用 os 模块调用其他程序 Windows
          5. 1445 Example 1-38 使用 os 模块在后台执行程序 Windows
          6. 1446 Example 1-39 使用 spawn 或 forkexec 调用其他程序
        5. 145 处理守护进程Daemon Processes
          1. 1451 Example 1-40 使用 os 模块使脚本作为守护执行 Unix
          2. 1452 Example 1-41 使用 os 模块终止当前进程
        6. 15 ospath 模块
          1. 151 处理文件名
            1. 1511 Example 1-42 使用 ospath 模块处理文件名
            2. 1512 Example 1-43 使用 ospath 模块检查文件名的特征
            3. 1513 Example 1-44 使用 ospath 模块将用户名插入到文件名
            4. 1514 Example 1-45 使用 ospath 替换文件名中的环境变量
          2. 152 搜索文件系统
            1. 1521 Example 1-46 使用 ospath 搜索文件系统
            2. 1522 Example 1-47 使用 oslistdir 搜索文件系统
            3. 1523 Example 1-48 使用 DirectoryWalker 搜索文件系统
            4. 1524 Example 1-49 使用 DirectoryStatWalker 搜索文件系统
          3. 16 stat 模块
            1. 1601 Example 1-50 Using the stat Module
          4. 17 string 模块
            1. 1701 Example 1-51 使用 string 模块
            2. 1702 Example 1-52 使用字符串方法替代 string 模块函数
            3. 1703 Example 1-53 使用 string 模块将字符串转为数字
          5. 18 re 模块
            1. 1801 Example 1-54 使用 re 模块来匹配字符串
            2. 1802 Example 1-55 使用 re 模块抽出匹配的子字符串
            3. 1803 Example 1-56 使用 re 模块搜索子字符串
            4. 1804 Example 1-57 使用 re 模块替换子字符串
            5. 1805 Example 1-58 使用 re 模块替换字符串通过回调函数
            6. 1806 Example 1-59 使用 re 模块匹配多个模式中的一个
          6. 19 math 模块
            1. 1901 Example 1-60 使用 math 模块
          7. 110 cmath 模块
            1. 11001 Example 1-61 使用 cmath 模块
          8. 111 operator 模块
            1. 11101 Example 1-62 使用 operator 模块
            2. 11102 Example 1-63 使用 operator 模块检查类型
          9. 112 copy 模块
            1. 11201 Example 1-64 使用 copy 模块复制对象
            2. 11202 Example 1-65 使用 copy 模块复制集合Collections
          10. 113 sys 模块
            1. 1131 处理命令行参数
              1. 11311 Example 1-66 使用sys模块获得脚本的参数
            2. 1132 处理模块
              1. 11321 Example 1-67 使用sys模块操作模块搜索路径
              2. 11322 Example 1-68 使用sys模块查找内建模块
              3. 11323 Example 1-69 使用sys模块查找已导入的模块
            3. 1133 处理引用记数
              1. 11331 Example 1-70 使用sys模块获得引用记数
              2. 11332 Example 1-71 使用sys模块获得当前平台
            4. 1134 跟踪程序
              1. 11341 Example 1-72 使用sys模块配置分析函数
              2. 11342 Example 1-73 使用sys模块配置单步跟踪函数
            5. 1135 处理标准输出输入
              1. 11351 Example 1-74 使用sys重定向输出
            6. 1136 退出程序
              1. 11361 Example 1-75 使用sys模块退出程序
              2. 11362 Example 1-76 捕获sysexit调用
              3. 11363 Example 1-77 另一种捕获sysexit调用的方法
            7. 114 atexit 模块
              1. 11401 Example 1-78 使用 atexit 模块
            8. 115 time 模块
              1. 1151 获得当前时间
                1. 11511 Example 1-79 使用 time 模块获取当前时间
              2. 1152 将时间值转换为字符串
                1. 11521 Example 1-80 使用 time 模块格式化时间输出
              3. 1153 将字符串转换为时间对象
                1. 11531 Example 1-81 使用 timestrptime 函数解析时间
                2. 11532 Example 1-82 strptime 实现
              4. 1154 转换时间值
                1. 11541 Example 1-83 使用 time 模块将本地时间元组转换为时间值整数
                2. 11542 Example 1-84 将 UTC 时间元组转换为时间值整数
              5. 1155 Timing 相关
                1. 11551 Example 1-85 使用 time 模块评价算法
              6. 116 types 模块
                1. 11601 Example 1-86 使用 types 模块
              7. 117 gc 模块
                1. 11701 Example 1-87 使用 gc 模块收集循环引用垃圾
  6. 2 更多标准模块
    1. 21 概览
      1. 211 文件与流
      2. 212 类型封装
      3. 213 随机数字
      4. 214 加密算法
    2. 22 fileinput 模块
      1. 2201 Example 2-1 使用 fileinput 模块循环一个文本文件
      2. 2202 Example 2-2 使用 fileinput 模块处理多个文本文件
      3. 2203 Example 2-3 使用 fileinput 模块将 CRLF 改为 LF
    3. 23 shutil 模块
      1. 2301 Example 2-4 使用 shutil 复制文件
      2. 2302 Example 2-5 使用 shutil 模块复制删除目录树
    4. 24 tempfile 模块
      1. 2401 Example 2-6 使用 tempfile 模块创建临时文件
      2. 2402 Example 2-7 使用 tempfile 模块打开临时文件
    5. 25 StringIO 模块
      1. 2501 Example 2-8 使用 StringIO 模块从内存文件读入内容
      2. 2502 Example 2-9 使用 StringIO 模块向内存文件写入内容
      3. 2503 Example 2-10 使用 StringIO 模块捕获输出
    6. 26 cStringIO 模块
      1. 2601 Example 2-11 使用 cStringIO 模块
      2. 2602 Example 2-12 后退至 StringIO
    7. 27 mmap 模块
      1. 2701 Example 2-13 使用 mmap 模块
      2. 2702 Example 2-14 对映射区域使用字符串方法和正则表达式
    8. 28 UserDict 模块
      1. 2801 Example 2-15 使用 UserDict 模块
    9. 29 UserList 模块
      1. 2901 Example 2-16 使用 UserList 模块
    10. 210 UserString 模块
      1. 21001 Example 2-17 使用 UserString 模块
    11. 211 traceback 模块
      1. 21101 Example 2-18 使用 traceback 模块打印跟踪返回信息
      2. 21102 Example 2-19 使用 traceback 模块将跟踪返回信息复制到字符串
      3. 21103 Example 2-20 使用 traceback Module 模块编码 Traceback 对象
    12. 212 errno 模块
      1. 21201 Example 2-21 使用 errno 模块
      2. 21202 Example 2-22 使用 errorcode 字典
    13. 213 getopt 模块
      1. 21301 Example 2-23 使用 getopt 模块
      2. 21302 Example 2-24 使用 getopt 模块处理长选项
    14. 214 getpass 模块
      1. 21401 Example 2-25 使用 getpass 模块
    15. 215 glob 模块
      1. 21501 Example 2-26 使用 glob 模块
    16. 216 fnmatch 模块
      1. 21601 Example 2-27 使用 fnmatch 模块匹配文件
      2. 21602 Example 2-28 使用 fnmatch 模块将模式转换为正则表达式
    17. 217 random 模块
      1. 21701 Example 2-29 使用 random 模块获得随机数字
      2. 21702 Example 2-30 使用 random 模块从序列取出随机项
      3. 21703 Example 2-31 使用 random 模块打乱一副牌
      4. 21704 Example 2-32 使用 random 模块生成高斯分布随机数
    18. 218 whrandom 模块
      1. 21801 Example 2-33 使用 whrandom 模块
      2. 21802 Example 2-34 使用 whrandom 模块创建多个随机生成器
    19. 219 md5 模块
      1. 21901 Example 2-35 使用 md5 模块
      2. 21902 Example 2-36 使用 md5 模块获得十六进制或 base64 编码的 md5 值
      3. 21903 Example 2-37 使用 md5 模块来处理口令的发送与应答的验证
      4. 21904 Example 2-38 使用 md5 模块检查数据完整性
    20. 220 sha 模块
      1. 22001 Example 2-39 使用 sha 模块
    21. 221 crypt 模块
      1. 22101 Example 2-40 使用 crypt 模块
      2. 22102 Example 2-41 使用 crypt 模块身份验证
    22. 222 rotor 模块
      1. 22201 Example 2-42 使用 rotor 模块
    23. 223 zlib 模块
      1. 22301 Example 2-43 使用 zlib 模块压缩字符串
      2. 22302 Example 2-44 使用 zlib 模块压缩多个不同类型文件
      3. 22303 Example 2-45 使用 zlib 模块解压缩流
      4. 22304 Example 2-46 压缩流的仿文件访问方式
    24. 224 code 模块
      1. 22401 Example 2-47 使用 code 模块编译语句
      2. 22402 Example 2-48 使用 code 模块模拟交互解释器
      3. 22403 Example 2-49 使用 code 模块实现简单的 Debugging
  7. 3 线程和进程
    1. 31 概览
      1. 311 线程
      2. 312 进程
    2. 32 threading 模块
      1. 3201 Example 3-1 使用 threading 模块
    3. 33 Queue 模块
      1. 3301 Example 3-2 使用 Queue 模块
      2. 3302 Example 3-3 使用限制大小的 Queue 模块
      3. 3303 Example 3-4 使用 Queue 模块实现优先级队列
      4. 3304 Example 3-5 使用 Queue 模块实现一个堆栈
    4. 34 thread 模块
      1. 3401 Example 3-6 使用 thread 模块
    5. 35 commands 模块
      1. 3501 Example 3-7 使用 commands 模块
    6. 36 pipes 模块
      1. 3601 Example 3-8 使用 pipes 模块
    7. 37 popen2 模块
      1. 3701 Example 3-9 使用 popen2 模块对字符串排序Module to Sort Strings
      2. 3702 Example 3-10 使用 popen2 模块控制 gnuchess
    8. 38 signal 模块
      1. 3801 Example 3-11 使用 signal 模块
  8. 4 数据表示
    1. 41 概览
      1. 411 二进制数据
      2. 412 自描述格式
      3. 413 输出格式
      4. 414 编码二进制数据
    2. 42 array 模块
      1. 4201 Example 4-1 使用 array 模块将数列转换为字符串
      2. 4202 Example 4-2 作为普通序列操作阵列
      3. 4203 Example 4-3 使用阵列将字符串转换为整数列表
      4. 4204 Example 4-4 使用 array 模块判断平台字节序
      5. 4205 Example 4-5 使用 sysbyteorder 属性判断平台字节序 Python 20 及以后
    3. 43 struct 模块
      1. 4301 Example 4-6 使用 struct 模块
    4. 44 xdrlib 模块
      1. 4401 Example 4-7 使用 xdrlib 模块
      2. 4402 Example 4-8 使用 xdrlib 模块发送 RPC 调用包
    5. 45 marshal 模块
      1. 4501 Example 4-9 使用 marshal 模块组合不连续数据
      2. 4502 Example 4-10 使用 marshal 模块处理代码
    6. 46 pickle 模块
      1. 4601 Example 4-11 使用 pickle 模块
      2. 4602 Example 4-12 使用 pickle 模块的二进制模式
    7. 47 cPickle 模块
      1. 4701 Example 4-13 使用 cPickle 模块
    8. 48 copy_reg 模块
      1. 4801 Example 4-14 使用 copy_reg 模块实现 code 对象的 pickle 操作
      2. 4802 Example 4-15 使用 copy_reg 模块实现文件对象的 pickle 操作
    9. 49 pprint 模块
      1. 4901 Example 4-16 使用 pprint 模块
    10. 410 repr 模块
      1. 41001 Example 4-17 使用 repr 模块
    11. 411 base64 模块
      1. 41101 Example 4-18 使用 base64 模块编码文件
      2. 41102 Example 4-19 使用 base64 模块编码字符串
      3. 41103 Example 4-20 使用 base64 模块做基本验证
      4. 41104 Example 4-21 使用 base64 为 Tkinter 封装 GIF 格式
    12. 412 binhex 模块
      1. 41201 Example 4-22 使用 binhex 模块
    13. 413 quopri 模块
      1. 41301 Example 4-23 使用 quopri 模块
    14. 414 uu 模块
      1. 41401 Example 4-24 使用 uu 模块编码二进制文件
      2. 41402 Example 4-25 使用 uu 模块解码 uu 格式的文件
    15. 415 binascii 模块
      1. 41501 Example 4-26 使用 binascii 模块
  9. 5 文件格式
    1. 51 概览
      1. 511 Markup 语言
      2. 512 配置文件
      3. 513 压缩档案格式
    2. 52 xmllib 模块
      1. 5201 Example 5-1 使用 xmllib 模块获取元素的信息
      2. 5202 Example 5-2 使用 xmllib 模块
    3. 53 xmlparsersexpat 模块
      1. 5301 Example 5-3 使用 xmlparsersexpat 模块
      2. 5302 Example 5-4 使用 xmlparsersexpat 模块读取 ISO Latin-1 文本
    4. 54 sgmllib 模块
      1. 5401 Example 5-5 使用 sgmllib 模块提取 Title 元素
      2. 5402 Example 5-6 使用 sgmllib 模块格式化 SGML 文档
      3. 5403 Example 5-7 使用 sgmllib 模块检查格式
      4. 5404 Example 5-8 使用 sgmllib 模块过滤 SGML 文档
    5. 55 htmllib 模块
      1. 5501 Example 5-9 使用 htmllib 模块
    6. 56 htmlentitydefs 模块
      1. 5601 Example 5-10 使用 htmlentitydefs 模块
      2. 5602 Example 5-11 使用 htmlentitydefs 模块翻译实体
      3. 5603 Example 5-12 转义 ISO Latin-1 实体
    7. 57 formatter 模块
      1. 5701 Example 5-13 使用 formatter 模块将 HTML 转换为事件流
      2. 5702 Example 5-14 使用 formatter 模块将 HTML 转换为纯文本
      3. 5703 Example 5-15 使用 formatter 模块自定义 Writer
    8. 58 ConfigParser 模块
      1. 5801 Example 5-16 使用 ConfigParser 模块
      2. 5802 Example 5-17 使用 ConfigParser 模块写入配置数据
    9. 59 netrc 模块
      1. 5901 Example 5-18 使用 netrc 模块
    10. 510 shlex 模块
      1. 51001 Example 5-19 使用 shlex 模块
    11. 511 zipfile 模块
      1. 5111 列出内容
        1. 51111 Example 5-20 使用 zipfile 模块列出 ZIP 文档中的文件
      2. 5112 从 ZIP 文件中读取数据
        1. 51121 Example 5-21 使用 zipfile 模块从 ZIP 文件中读取数据
      3. 5113 向 ZIP 文件写入数据
        1. 51131 Example 5-22 使用 zipfile 模块将文件储存在 ZIP 文件里
        2. 51132 Example 5-23 使用 zipfile 模块在 ZIP 文件中储存字符串
      4. 512 gzip 模块
        1. 51201 Example 5-24 使用 gzip 模块读取压缩文件
        2. 51202 Example 5-25 给 gzip 模块添加 seektell 支持
  10. 6 邮件和新闻消息处理
    1. 61 概览
    2. 62 rfc822 模块
      1. 6201 Example 6-1 使用 rfc822 模块
      2. 6202 Example 6-2 使用 rfc822 模块解析标头字段
    3. 63 mimetools 模块
      1. 6301 Example 6-3 使用 mimetools 模块
    4. 64 MimeWriter 模块
      1. 6401 Example 6-4 使用 MimeWriter 模块
      2. 6402 Example 6-5 MimeWriter 模块的辅助类
    5. 65 mailbox 模块
      1. 6501 Example 6-6 使用 mailbox 模块
    6. 66 mailcap 模块
      1. 6601 Example 6-7 使用 mailcap 模块获得 Capability 字典
      2. 6602 Example 6-8 使用 mailcap 模块获得打开
    7. 67 mimetypes 模块
      1. 6701 Example 6-9 使用 mimetypes 模块
    8. 68 packmail 模块
      1. 6801 Example 6-10 使用 packmail 打包单个文件
    9. 69 mimify 模块
      1. 6901 Example 6-12 使用 mimify 模块解码信息
      2. 6902 Example 6-13 使用 mimify 模块编码信息
    10. 610 multifile 模块
      1. 61001 Example 6-14 使用 multifile 模块
  11. 7 网络协议
    1. 71 概览
      1. 711 Internet 时间协议
      2. 712 HTTP 协议
    2. 72 socket 模块
      1. 7201 Example 7-1 使用 socket 模块实现一个时间客户端
      2. 7202 Example 7-2 使用 socket 模块实现一个时间服务器
      3. 7203 Example 7-3 一个时间协议客户端
      4. 7204 Example 7-4 使用 socket 模块实现一个报文时间客户端
    3. 73 select 模块
      1. 7301 Example 7-6 使用 select 模块等待经 socket 发送的数据
    4. 74 asyncore 模块
      1. 7401 Example 7-7 使用 asyncore 模块从时间服务器获得时间
      2. 7402 Example 7-8 使用 asyncore 模块实现时间服务器
      3. 7403 Example 7-9 使用 asyncore 模块发送 HTTP 请求
      4. 7404 Example 7-10 使用 SimpleAsyncHTTP 类
      5. 7405 Example 7-11 使用 SimpleAsyncHTTP 类处理重定向
    5. 75 asynchat 模块
      1. 7501 Example 7-12 使用 asynchat 模块实现一个迷你 HTTP 服务器
      2. 7502 Example 7-13 使用 asynchat 模块实现一个简单的 HTTP 服务器
    6. 76 urllib 模块
      1. 7601 Example 7-14 使用 urllib 模块获取远程资源
      2. 7602 Example 7-15 用 urllib 模块实现自动身份验证
    7. 77 urlparse 模块
      1. 7701 Example 7-16 使用 urlparse 模块
      2. 7702 Example 7-17 使用 urlparse 模块处理 HTTP 定位器 HTTP Locators
      3. 7703 Example 7-18 使用 urlparse 模块处理 HTTP 定位器 HTTP Locators
      4. 7704 Example 7-19 使用 urlparse 模块组合相对定位器
    8. 78 cookie 模块
      1. 7801 Example 7-20 使用 cookie 模块
    9. 79 robotparser 模块
      1. 7901 Example 7-21 使用 robotparser 模块
    10. 710 ftplib 模块
      1. 71001 Example 7-22 使用 ftplib 模块获得目录列表
      2. 71002 Example 7-23 使用 ftplib 模块下载文件
      3. 71003 Example 7-24 使用 ftplib 模块上传文件
    11. 711 gopherlib 模块
      1. 71101 Example 7-25 使用 gopherlib 模块
    12. 712 httplib 模块
      1. 71201 Example 7-26 使用 httplib 模块
    13. 7121 将数据发送给服务器
      1. 71211 Example 7-27 使用 httplib 发送数据
    14. 713 poplib 模块
      1. 71301 Example 7-28 使用 poplib 模块
    15. 714 imaplib 模块
      1. 71401 Example 7-29 使用 imaplib 模块
    16. 715 smtplib 模块
      1. 71501 Example 7-30 使用 smtplib 模块
    17. 716 telnetlib 模块
      1. 71601 Example 7-31 使用 telnetlib 模块登陆到远程服务器
    18. 717 nntplib 模块
      1. 7171 列出消息
        1. 71711 Example 7-32 使用 nntplib 模块列出消息
      2. 7172 下载消息
        1. 71721 Example 7-33 使用 nntplib 模块下载消息
        2. 71722 Example 7-34 使用 nntplib 和 rfc822 模块处理消息
      3. 718 SocketServer 模块
        1. 71801 Example 7-35 使用 SocketServer 模块
      4. 719 BaseHTTPServer 模块
        1. 71901 Example 7-36 使用 BaseHTTPServer 模块
      5. 720 SimpleHTTPServer 模块
        1. 72001 Example 7-37 使用 SimpleHTTPServer 模块
        2. 72002 Example 7-38 使用 SimpleHTTPServer 模块实现代理
      6. 721 CGIHTTPServer 模块
        1. 72101 Example 7-39 使用 CGIHTTPServer 模块
      7. 722 cgi 模块
        1. 72201 Example 7-40 使用 cgi 模块
      8. 723 webbrowser 模块
        1. 72301 Example 7-41 使用 webbrowser 模块
  12. 8 国际化
    1. 81 locale 模块
      1. 8101 Example 8-2 使用 locale 模块获得当前平台 locale 设置
    2. 82 unicodedata 模块
      1. 8201 Example 8-3 使用 unicodedata 模块
    3. 83 ucnhash 模块
      1. 8301 Example 8-4 使用 ucnhash 模块
  13. 9 多媒体相关模块
    1. 91 概览
    2. 92 imghdr 模块
      1. 9201 Example 9-1 使用 imghdr 模块
    3. 93 sndhdr 模块
      1. 9301 Example 9-2 使用 sndhdr 模块
    4. 94 whatsound 模块
      1. 9401 Example 9-3 使用 whatsound 模块
    5. 95 aifc 模块
      1. 9501 Example 9-4 使用 aifc 模块
    6. 96 sunau 模块
      1. 9601 Example 9-5 使用 sunau 模块
    7. 97 sunaudio 模块
      1. 9701 Example 9-6 使用 sunaudio 模块
    8. 98 wave 模块
      1. 9801 Example 9-7 使用 wave 模块
    9. 99 audiodev 模块
      1. 9901 Example 9-8 使用 audiodev 模块
    10. 910 winsound 模块
      1. 91001 Example 9-9 使用 winsound 模块
  14. 10 数据储存
    1. 101 概览
    2. 102 anydbm 模块
      1. 10201 Example 10-1 使用 anydbm 模块
    3. 103 whichdb 模块
      1. 10301 Example 10-2 使用 whichdb 模块
    4. 104 shelve 模块
      1. 10401 Example 10-3 使用 shelve 模块
      2. 10402 Example 10-4 使用 shelve 模块处理给定数据库
    5. 105 dbhash 模块
      1. 10501 Example 10-5 使用 dbhash 模块
    6. 106 dbm 模块
      1. 10601 Example 10-6 使用 dbm 模块
    7. 107 dumbdbm 模块
      1. 10701 Example 10-7 使用 dumbdbm 模块
    8. 108 gdbm 模块
      1. 10801 Example 10-8 使用 gdbm 模块
  15. 11 工具和实用程序
    1. 111 dis 模块
      1. 11101 Example 11-1 使用 dis 模块
    2. 112 pdb 模块
      1. 11201 Example 11-2 使用 pdb 模块
    3. 113 bdb 模块
      1. 11301 Example 11-3 使用 bdb 模块
    4. 114 profile 模块
      1. 11401 Example 11-4 U使用 profile 模块
    5. 115 pstats 模块
      1. 11501 Example 11-5 使用 pstats 模块
    6. 116 tabnanny 模块
      1. 11601 Example 11-6 使用 tabnanny 模块
  16. 12 其他模块
    1. 121 概览
    2. 122 fcntl 模块
      1. 12201 Example 12-1 Using the fcntl Module
    3. 123 pwd 模块
      1. 12301 Example 12-2 使用 pwd 模块
      2. 12302 Example 12-3 使用 pwd 模块
    4. 124 grp 模块
      1. 12401 Example 12-4 使用 grp 模块
      2. 12402 Example 12-5 使用 grp 模块缓存用户组信息
    5. 125 nis 模块
      1. 12501 Example 12-6 nis
    6. 126 curses 模块
      1. 12601 Example 12-7 curses
    7. 127 termios 模块
      1. 12701 Example 12-8 使用 termios 模块
    8. 128 tty 模块
      1. 12801 Example 12-9 使用 tty 模块
    9. 129 resource 模块
      1. 12901 Example 12-10 使用 resource 模块查询当前设置
      2. 12902 Example 12-11 使用 resource 模块限制资源
    10. 1210 syslog 模块
      1. 121001 Example 12-12 使用 syslog 模块
    11. 1211 msvcrt 模块
      1. 121101 Example 12-13 使用 msvcrt 模块获得按键值
      2. 121102 Example 12-14 使用 msvcrt 模块接受键盘输入
      3. 121103 Example 12-15 使用 msvcrt 模块锁定文件
    12. 1212 nt 模块
      1. 121201 Example 12-16 使用 nt 模块
    13. 1213 _winreg 模块
      1. 121301 Example 12-17 使用 _winreg 模块
    14. 1214 posix 模块
      1. 121401 Example 12-18 使用 posix 模块
  17. 13 执行支持模块
    1. 131 dospath 模块
      1. 13101 Example 13-1 使用 dospath 模块
    2. 132 macpath 模块
      1. 13201 Example 13-2 使用 macpath 模块
    3. 133 ntpath 模块
      1. 13301 Example 13-3 使用 ntpath 模块
    4. 134 posixpath 模块
      1. 13401 Example 13-4 使用 posixpath 模块
    5. 135 strop 模块
      1. 13501 Example 13-5 使用 strop 模块
    6. 136 imp 模块
      1. 13601 Example 13-6 使用 imp 模块
    7. 137 new 模块
      1. 13701 Example 13-7 使用 new 模块
    8. 138 pre 模块
      1. 13801 Example 13-8 使用 pre 模块
    9. 139 sre 模块
      1. 13901 Example 13-9 使用 sre 模块
    10. 1310 py_compile 模块
      1. 131001 Example 13-10 使用 py_compile 模块
    11. 1311 compileall 模块
      1. 131101 Example 13-11 使用 compileall 模块编译目录中的所有脚本
    12. 1312 ihooks 模块
      1. 131201 Example 13-12 使用 ihooks 模块
    13. 1313 linecache 模块
      1. 131301 Example 13-13 使用 linecache 模块
    14. 1314 macurl2path 模块
      1. 131401 Example 13-14 使用 macurl2path 模块
    15. 1315 nturl2path 模块
      1. 131501 Example 13-15 使用 nturl2path 模块
      2. 131502 Example 13-16 通过 urllib 调用 nturl2path 模块
    16. 1316 tokenize 模块
      1. 131601 Example 13-17 使用 tokenize 模块
    17. 1317 keyword 模块
      1. 131701 Example 13-18 使用 keyword 模块
    18. 1318 parser 模块
      1. 131801 Example 13-19 使用 parser 模块
    19. 1319 symbol 模块
      1. 131901 Example 13-20 使用 symbol 模块
    20. 1320 token 模块
      1. 132001 Example 13-21 使用 token 模块
  18. 14 其他模块
    1. 141 概览
    2. 142 pyclbr 模块
      1. 14201 Example 14-1 使用 pyclbr 模块
      2. 14202 Example 14-2 使用 pyclbr 模块读取类和函数
      3. 14203 Example 14-3 使用 pyclbr 模块
    3. 143 filecmp 模块
      1. 14301 Example 14-4 使用 filecmp 模块
    4. 144 cmd 模块
      1. 14401 Example 14-5 使用 cmd 模块
    5. 145 rexec 模块
      1. 14501 Example 14-6 使用 rexec 模块
    6. 146 Bastion 模块
      1. 14601 Example 14-7 使用 Bastion 模块
      2. 14602 Example 14-8 使用 Bastion 模块处理非标准过滤器
    7. 147 readline 模块
      1. 14701 Example 14-9 使用 readline 模块
    8. 148 rlcompleter 模块
      1. 14801 Example 14-10 使用 rlcompleter 模块展开名字
    9. 149 statvfs 模块
      1. 14901 Example 14-11 使用 statvfs 模块
    10. 1410 calendar 模块
      1. 141001 Example 14-12 使用 calendar 模块
      2. 141002 Example 14-13 使用 calendar 模块
    11. 1411 sched 模块
      1. 141101 Example 14-14 使用 sched 模块
    12. 1412 statcache 模块
      1. 141201 Example 14-15 使用 statcache 模块
    13. 1413 grep 模块
      1. 141301 Example 14-16 使用 grep 模块
    14. 1414 dircache 模块
      1. 141401 Example 14-17 使用 dircache 模块
    15. 1415 dircmp 模块
      1. 141501 Example 14-18 使用 dircmp 模块
    16. 1416 cmp 模块
      1. 141601 Example 14-19 使用 cmp 模块
    17. 1417 cmpcache 模块
      1. 141701 Example 14-20 使用 cmpcache 模块
    18. 1418 util 模块
      1. 141801 Example 14-21 实现 util 模块的 remove 函数
      2. 141802 Example 14-22 实现 util 模块的 readfile 函数
      3. 141803 Example 14-23 实现 util 模块的 readopenfile 函数
    19. 1419 soundex 模块
      1. 141901 Example 14-24 使用 soundex 模块
    20. 1420 timing 模块
      1. 142001 Example 14-25 使用 timing 模块
      2. 142002 Example 14-26 模拟 timing 模块
    21. 1421 posixfile 模块
      1. 142101 Example 14-27 使用 posixfile 模块
    22. 1422 bisect 模块
      1. 142201 Example 14-28 使用 bisect 模块向列表插入条目
      2. 142202 Example 14-29 使用 bisect 模块获得插入点位置
    23. 1423 knee 模块
      1. 142301 Example 14-30 使用 knee 模块
    24. 1424 tzparse 模块
      1. 142401 Example 14-31 使用 tzparse 模块
    25. 1425 regex 模块
      1. 142501 Example 14-32 使用 regex 模块
    26. 1426 regsub 模块
      1. 142601 Example 14-33 使用 regsub 模块
    27. 1427 reconvert 模块
      1. 142701 Example 14-34 使用 reconvert 模块
    28. 1428 regex_syntax 模块
      1. 142801 Example 14-35 使用 regex_syntax 模块
    29. 1429 find 模块
      1. 142901 Example 14-36 使用 find 模块
  19. 15 Py 20 后新增模块
  20. 16 后记
 

  • 0.1. 关于本书
  • 0.2. 代码约定
  • 0.3. 关于例子
  • 0.4. 如何联系我们
  1. 核心模块
    • 1.1. 介绍
    • 1.2. _ _builtin_ _ 模块
    • 1.3. exceptions 模块
    • 1.4. os 模块
    • 1.5. os.path 模块
    • 1.6. stat 模块
    • 1.7. string 模块
    • 1.8. re 模块
    • 1.9. math 模块
    • 1.10. cmath 模块
    • 1.11. operator 模块
    • 1.12. copy 模块
    • 1.13. sys 模块
    • 1.14. atexit 模块
    • 1.15. time 模块
    • 1.16. types 模块
    • 1.17. gc 模块
  2. 更多标准模块
    • 2.1. 概览
    • 2.2. fileinput 模块
    • 2.3. shutil 模块
    • 2.4. tempfile 模块
    • 2.5. StringIO 模块
    • 2.6. cStringIO 模块
    • 2.7. mmap 模块
    • 2.8. UserDict 模块
    • 2.9. UserList 模块
    • 2.10. UserString 模块
    • 2.11. traceback 模块
    • 2.12. errno 模块
    • 2.13. getopt 模块
    • 2.14. getpass 模块
    • 2.15. glob 模块
    • 2.16. fnmatch 模块
    • 2.17. random 模块
    • 2.18. whrandom 模块
    • 2.19. md5 模块
    • 2.20. sha 模块
    • 2.21. crypt 模块
    • 2.22. rotor 模块
    • 2.23. zlib 模块
    • 2.24. code 模块
  3. 线程和进程
    • 3.1. 概览
    • 3.2. threading 模块
    • 3.3. Queue 模块
    • 3.4. thread 模块
    • 3.5. commands 模块
    • 3.6. pipes 模块
    • 3.7. popen2 模块
    • 3.8. signal 模块
  4. 数据表示
    • 4.1. 概览
    • 4.2. array 模块
    • 4.3. struct 模块
    • 4.4. xdrlib 模块
    • 4.5. marshal 模块
    • 4.6. pickle 模块
    • 4.7. cPickle 模块
    • 4.8. copy_reg 模块
    • 4.9. pprint 模块
    • 4.10. repr 模块
    • 4.11. base64 模块
    • 4.12. binhex 模块
    • 4.13. quopri 模块
    • 4.14. uu 模块
    • 4.15. binascii 模块
  5. 文件格式
    • 5.1. 概览
    • 5.2. xmllib 模块
    • 5.3. xml.parsers.expat 模块
    • 5.4. sgmllib 模块
    • 5.5. htmllib 模块
    • 5.6. htmlentitydefs 模块
    • 5.7. formatter 模块
    • 5.8. ConfigParser 模块
    • 5.9. netrc 模块
    • 5.10. shlex 模块
    • 5.11. zipfile 模块
    • 5.12. gzip 模块
  6. 邮件和新闻消息处理
    • 6.1. 概览
    • 6.2. rfc822 模块
    • 6.3. mimetools 模块
    • 6.4. MimeWriter 模块
    • 6.5. mailbox 模块
    • 6.6. mailcap 模块
    • 6.7. mimetypes 模块
    • 6.8. packmail 模块
    • 6.9. mimify 模块
    • 6.10. multifile 模块
  7. 网络协议
    • 7.1. 概览
    • 7.2. socket 模块
    • 7.3. select 模块
    • 7.4. asyncore 模块
    • 7.5. asynchat 模块
    • 7.6. urllib 模块
    • 7.7. urlparse 模块
    • 7.8. cookie 模块
    • 7.9. robotparser 模块
    • 7.10. ftplib 模块
    • 7.11. gopherlib 模块
    • 7.12. httplib 模块
    • 7.13. poplib 模块
    • 7.14. imaplib 模块
    • 7.15. smtplib 模块
    • 7.16. telnetlib 模块
    • 7.17. nntplib 模块
    • 7.18. SocketServer 模块
    • 7.19. BaseHTTPServer 模块
    • 7.20. SimpleHTTPServer 模块
    • 7.21. CGIHTTPServer 模块
    • 7.22. cgi 模块
    • 7.23. webbrowser 模块
  8. 国际化
    • 8.1. locale 模块
    • 8.2. unicodedata 模块
    • 8.3. ucnhash 模块
  9. 多媒体相关模块
    • 9.1. 概览
    • 9.2. imghdr 模块
    • 9.3. sndhdr 模块
    • 9.4. whatsound 模块
    • 9.5. aifc 模块
    • 9.6. sunau 模块
    • 9.7. sunaudio 模块
    • 9.8. wave 模块
    • 9.9. audiodev 模块
    • 9.10. winsound 模块
  10. 数据储存
    • 10.1. 概览
    • 10.2. anydbm 模块
    • 10.3. whichdb 模块
    • 10.4. shelve 模块
    • 10.5. dbhash 模块
    • 10.6. dbm 模块
    • 10.7. dumbdbm 模块
    • 10.8. gdbm 模块
  11. 工具和实用程序
    • 11.1. dis 模块
    • 11.2. pdb 模块
    • 11.3. bdb 模块
    • 11.4. profile 模块
    • 11.5. pstats 模块
    • 11.6. tabnanny 模块
  12. 其他模块
    • 12.1. 概览
    • 12.2. fcntl 模块
    • 12.3. pwd 模块
    • 12.4. grp 模块
    • 12.5. nis 模块
    • 12.6. curses 模块
    • 12.7. termios 模块
    • 12.8. tty 模块
    • 12.9. resource 模块
    • 12.10. syslog 模块
    • 12.11. msvcrt 模块
    • 12.12. nt 模块
    • 12.13. _winreg 模块
    • 12.14. posix 模块
  13. 执行支持模块
    • 13.1. dospath 模块
    • 13.2. macpath 模块
    • 13.3. ntpath 模块
    • 13.4. posixpath 模块
    • 13.5. strop 模块
    • 13.6. imp 模块
    • 13.7. new 模块
    • 13.8. pre 模块
    • 13.9. sre 模块
    • 13.10. py_compile 模块
    • 13.11. compileall 模块
    • 13.12. ihooks 模块
    • 13.13. linecache 模块
    • 13.14. macurl2path 模块
    • 13.15. nturl2path 模块
    • 13.16. tokenize 模块
    • 13.17. keyword 模块
    • 13.18. parser 模块
    • 13.19. symbol 模块
    • 13.20. token 模块
  14. 其他模块
    • 14.1. 概览
    • 14.2. pyclbr 模块
    • 14.3. filecmp 模块
    • 14.4. cmd 模块
    • 14.5. rexec 模块
    • 14.6. Bastion 模块
    • 14.7. readline 模块
    • 14.8. rlcompleter 模块
    • 14.9. statvfs 模块
    • 14.10. calendar 模块
    • 14.11. sched 模块
    • 14.12. statcache 模块
    • 14.13. grep 模块
    • 14.14. dircache 模块
    • 14.15. dircmp 模块
    • 14.16. cmp 模块
    • 14.17. cmpcache 模块
    • 14.18. util 模块
    • 14.19. soundex 模块
    • 14.20. timing 模块
    • 14.21. posixfile 模块
    • 14.22. bisect 模块
    • 14.23. knee 模块
    • 14.24. tzparse 模块
    • 14.25. regex 模块
    • 14.26. regsub 模块
    • 14.27. reconvert 模块
    • 14.28. regex_syntax 模块
    • 14.29. find 模块
  15. Py 2.0 后新增模块
  16. 后记

"We‘d like to pretend that ‘Fredrik‘ is a role, but even hundreds of volunteers couldn‘t possibly keep up. No, ‘Fredrik‘ is the result of crossing an http server with a spam filter with an emacs whatsit and some other stuff besides."
-Gordon McMillan, June 1998

Python 2.0发布附带了一个包含200个以上模块的可扩展的标准库. 本书简要地介绍每个模块并提供至少一个例子来说明如何使用它. 本书一共包含360个例子.

0.1. 关于本书

"Those people who have nothing better to do than post on the Internet all day long are rarely the ones who have the most insights."
- Jakob Nielsen, December 1998

五年前我偶然遇到了 Python, 开始了我的 Python 之旅, 我花费了大量的时间 在 comp.lang.python 新闻组里回答问题. 也许某个人发现一个模块正是他想要的, 但是却不知道如何使用它. 也许某个人为他的任务挑选的不合适的模块. 也许某个人已经厌 倦了发明新轮子. 大多时候, 一个简短的例子要比一份手册文档更有帮助.

本书是超过3,000个新闻组讨论的精华部分, 当然也有很多的新脚本, 为了涵盖标准库的每个角落.

我尽力使得每个脚本都易于理解, 易于重用代码. 我有意缩短注释的长度, 如果你想更深入地 了解背景, 那么你可以参阅每个 Python 发布中的参考手册. 本书的重要之处在于范例代码.

我们欢迎任何评论, 建议, 以及 bug 报告, 请将它们发送到 [email protected]. 我将阅读尽我所能阅读所有的邮件, 但可能回复不是那么及时.

本书的相关更新内容以及其他信息请访问 http://www.pythonware.com/people/fredrik/librarybook.htm

为什么没有Tkinter?

本书涵盖了整个标准库, 除了(可选的)Tkinter ui(user-interface : 用户界面) 库. 有很多原因, 更多是因为时间, 本书的空间, 以及我正在写另一本关于 Tkinter 的书.

关于这些书的信息, 请访问 http://www.pythonware.com/people/fredrik/tkinterbook.htm. (不用看了,又一404)

产品细节

本书使用DocBook SGML编写, 我使用了一系列的工具, 包括Secret Labs‘ PythonWorks, Excosoft Documentor, James Clark‘s Jade DSSSL processor, Norm Walsh‘s DocBook stylesheets, 当然,还有一些 Python 脚本.

感谢帮忙校对的人们: Tim Peters, Guido van Rossum, David Ascher, Mark Lutz, 和 Rael Dornfest, 以及 PythonWare 成员: Matthew Ellis, Håkan Karlsson, 和 Rune Uhlin.

感谢 Lenny Muellner, 他帮助我把SGML文件转变为你们现在所看到的这本书, 以及Christien Shangraw, 他将那些代码文件集合起来做成了随书CD (可以在http://examples.oreilly.com/pythonsl 找到, 竟然没有404, 奇迹).

0.2. 代码约定

本书使用以下习惯用法:

斜体

用于文件名和命令. 还用于定义术语.

等宽字体 e.g. Python

用于代码以及方法,模块,操作符,函数,语句,属性等的名称.

等宽粗体

用于代码执行结果.

0.3. 关于例子

除非提到,所有例子都可以在 Python 1.5.2 和 Python 2.0 下运行. 能不能在 Python 2.4/2.5 下执行.....看参与翻译各位的了.

除了一些平台相关模块的脚本, 所有例子都可以在 Windows, Solaris, 以及 Linux 下正常执行.

所有代码都是有版权的. 当然,你可以自由地使用这些这些模块,别忘记你是从哪得到(?学会)这些的.

大多例子的文件名都包含它所使用的模块名称,后边是 "-example-" 以及一个唯一的"序号". 注意有些例子并不是按顺序出现的, 这是为了匹配本书的较早版本 - (the eff-bot guide to) The Standard Python Library.

你可以在网上找到本书附带CD的内容 (参阅 http://examples.oreilly.com/pythonsl). 更多信息以及更新内容参阅http://www.pythonware.com/people/fredrik/librarybook.htm. (ft, 又一404. 大家一定不要看~)

0.4. 如何联系我们

Python 江湖 QQ 群: 43680167

Feather (校对) QQ: 85660100


1. 核心模块

"Since the functions in the C runtime library are not part of the Win32 API, we believe the number of applications that will be affected by this bug to be very limited."
- Microsoft, January 1999

1.1. 介绍

Python 的标准库包括了很多的模块, 从 Python 语言自身特定的类型和声明, 到一些只用于少数程序的不著名的模块.

本章描述了一些基本的标准库模块. 任何大型 Python 程序都有可能直接或间接地使用到这类模块的大部分.

1.1.1. 内建函数和异常

下面的这两个模块比其他模块加在一起还要重要: 定义内建函数(例如 len, int, range ...)的 _ _builtin_ _ 模块, 以及定义所有内建异常的 exceptions模块.

Python 在启动时导入这两个模块, 使任何程序都能够使用它们.

1.1.2. 操作系统接口模块

Python 有许多使用了 POSIX 标准 API 和标准 C 语言库的模块. 它们为底层操作系统提供了平台独立的接口.

这类的模块包括: 提供文件和进程处理功能的 os 模块; 提供平台独立的文件名处理 (分拆目录名, 文件名, 后缀等)的 os.path 模块; 以及时间日期处理相关的 time/datetime 模块.

[!Feather注: datetime 为 Py2.3 新增模块, 提供增强的时间处理方法 ]

延伸一点说, 网络和线程模块同样也可以归为这一个类型. 不过 Python 并没有在所有的平台/版本实现这些.

1.1.3. 类型支持模块

标准库里有许多用于支持内建类型操作的库. string 模块实现了常用的字符串处理. math 模块提供了数学计算操作和常量(pi, e都属于这类常量), cmath模块为复数提供了和 math 一样的功能.

1.1.4. 正则表达式

re 模块为 Python 提供了正则表达式支持. 正则表达式是用于匹配字符串或特定子字符串的 有特定语法的字符串模式.

1.1.5. 语言支持模块

sys 模块可以让你访问解释器相关参数,比如模块搜索路径,解释器版本号等. operator 模块提供了和内建操作符作用相同的函数. copy 模块允许 你复制对象, Python 2.0 新加入的 gc 模块提供了对垃圾收集的相关控制功能.


1.2. _ _builtin_ _ 模块

这个模块包含 Python 中使用的内建函数. 一般不用手动导入这个模块; Python会帮你做好一切.

1.2.1. 使用元组或字典中的参数调用函数

Python允许你实时地创建函数参数列表. 只要把所有的参数放入一个元组中, 然后通过内建的 apply 函数调用函数. 如 Example 1-1.

1.2.1.1. Example 1-1. 使用 apply 函数

File: builtin-apply-example-1.py def function(a, b): print a, b apply(function, ("whither", "canada?")) apply(function, (1, 2 + 3)) whither canada? 1 5

要想把关键字参数传递给一个函数, 你可以将一个字典作为 apply 函数的第 3 个参数, 参考 Example 1-2.

1.2.1.2. Example 1-2. 使用 apply 函数传递关键字参数

File: builtin-apply-example-2.py def function(a, b): print a, b apply(function, ("crunchy", "frog")) apply(function, ("crunchy",), {"b": "frog"}) apply(function, (), {"a": "crunchy", "b": "frog"}) crunchy frog crunchy frog crunchy frog

apply 函数的一个常见用法是把构造函数参数从子类传递到基类, 尤其是构造函数需要接受很多参数的时候. 如 Example 1-3 所示.

1.2.1.3. Example 1-3. 使用 apply 函数调用基类的构造函数

File: builtin-apply-example-3.py class Rectangle: def _ _init_ _(self, color="white", width=10, height=10): print "create a", color, self, "sized", width, "x", height class RoundedRectangle(Rectangle): def _ _init_ _(self, **kw): apply(Rectangle._ _init_ _, (self,), kw) rect = Rectangle(color="green", height=100, width=100) rect = RoundedRectangle(color="blue", height=20) create a green <Rectangle instance at 8c8260> sized 100 x 100 create a blue <RoundedRectangle instance at 8c84c0> sized 10 x 20

Python 2.0 提供了另个方法来做相同的事. 你只需要使用一个传统的函数调用 , 使用 * 来标记元组, ** 来标记字典.

下面两个语句是等价的:

result = function(*args, **kwargs) result = apply(function, args, kwargs)

1.2.2. 加载和重载模块

如果你写过较庞大的 Python 程序, 那么你就应该知道 import 语句是用来导入外部模块的 (当然也可以使用 from-import 版本). 不过你可能不知道import 其实是靠调用内建 函数 _ _import_ _ 来工作的.

通过这个戏法你可以动态地调用函数. 当你只知道模块名称(字符串)的时候, 这将很方便. Example 1-4 展示了这种用法, 动态地导入所有以 "-plugin" 结尾的模块.

1.2.2.1. Example 1-4. 使用 _ _import_ _ 函数加载模块

File: builtin-import-example-1.py import glob, os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_name, ext = os.path.splitext(os.path.basename(module_file)) module = _ _import_ _(module_name) modules.append(module) except ImportError: pass # ignore broken modules # say hello to all modules for module in modules: module.hello() example-plugin says hello

注意这个 plug-in 模块文件名中有个 "-" (hyphens). 这意味着你不能使用普通的 import 命令, 因为 Python 的辨识符不允许有 "-" .

Example 1-5 展示了 Example 1-4 中使用的 plug-in .

1.2.2.2. Example 1-5. Plug-in 例子

File: example-plugin.py def hello(): print "example-plugin says hello"

Example 1-6 展示了如何根据给定模块名和函数名获得想要的函数对象.

1.2.2.3. Example 1-6. 使用 _ _import_ _ 函数获得特定函数

File: builtin-import-example-2.py def getfunctionbyname(module_name, function_name): module = _ _import_ _(module_name) return getattr(module, function_name) print repr(getfunctionbyname("dumbdbm", "open")) <function open at 794fa0>

你也可以使用这个函数实现延迟化的模块导入 (lazy module loading). 例如在 Example 1-7 中 的 string 模块只在第一次使用的时候导入.

1.2.2.4. Example 1-7. 使用 _ _import_ _ 函数实现 延迟导入

File: builtin-import-example-3.py class LazyImport: def _ _init_ _(self, module_name): self.module_name = module_name self.module = None def _ _getattr_ _(self, name): if self.module is None: self.module = _ _import_ _(self.module_name) return getattr(self.module, name) string = LazyImport("string") print string.lowercase abcdefghijklmnopqrstuvwxyz

Python 也提供了重新加载已加载模块的基本支持. [Example 1-8 #eg-1-8 会加载 3 次 hello.py 文件.

1.2.2.5. Example 1-8. 使用 reload 函数

File: builtin-reload-example-1.py import hello reload(hello) reload(hello) hello again, and welcome to the show hello again, and welcome to the show hello again, and welcome to the show

reload 直接接受模块作为参数.

[!Feather 注: ^ 原句无法理解, 稍后讨论.]

注意,当你重加载模块时, 它会被重新编译, 新的模块会代替模块字典里的老模块. 但是, 已经用原模块里的类建立的实例仍然使用的是老模块(不会被更新).

同样地, 使用 from-import 直接创建的到模块内容的引用也是不会被更新的.

1.2.3. 关于名称空间

dir 返回由给定模块, 类, 实例, 或其他类型的所有成员组成的列表. 这可能在交互式 Python 解释器下很有用, 也可以用在其他地方. Example 1-9展示了 dir函数的用法.

1.2.3.1. Example 1-9. 使用 dir 函数

File: builtin-dir-example-1.py def dump(value): print value, "=>", dir(value) import sys dump(0) dump(1.0) dump(0.0j) # complex number dump([]) # list dump({}) # dictionary dump("string") dump(len) # function dump(sys) # module 0 => [] 1.0 => [] 0j => [‘conjugate‘, ‘imag‘, ‘real‘] [] => [‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘] {} => [‘clear‘, ‘copy‘, ‘get‘, ‘has_key‘, ‘items‘, ‘keys‘, ‘update‘, ‘values‘] string => [] <built-in function len> => [‘_ _doc_ _‘, ‘_ _name_ _‘, ‘_ _self_ _‘] <module ‘sys‘ (built-in)> => [‘_ _doc_ _‘, ‘_ _name_ _‘, ‘_ _stderr_ _‘, ‘_ _stdin_ _‘, ‘_ _stdout_ _‘, ‘argv‘, ‘builtin_module_names‘, ‘copyright‘, ‘dllhandle‘, ‘exc_info‘, ‘exc_type‘, ‘exec_prefix‘, ‘executable‘, ...

在例子 Example 1-10中定义的 getmember 函数返回给定类定义的所有类级别的属性和方法.

1.2.3.2. Example 1-10. 使用 dir 函数查找类的所有成员

File: builtin-dir-example-2.py class A: def a(self): pass def b(self): pass class B(A): def c(self): pass def d(self): pass def getmembers(klass, members=None): # get a list of all class members, ordered by class if members is None: members = [] for k in klass._ _bases_ _: getmembers(k, members) for m in dir(klass): if m not in members: members.append(m) return members print getmembers(A) print getmembers(B) print getmembers(IOError) [‘_ _doc_ _‘, ‘_ _module_ _‘, ‘a‘, ‘b‘] [‘_ _doc_ _‘, ‘_ _module_ _‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘] [‘_ _doc_ _‘, ‘_ _getitem_ _‘, ‘_ _init_ _‘, ‘_ _module_ _‘, ‘_ _str_ _‘]

getmembers 函数返回了一个有序列表. 成员在列表中名称出现的越早, 它所处的类层次就越高. 如果无所谓顺序的话, 你可以使用字典代替列表.

[!Feather 注: 字典是无序的, 而列表和元组是有序的, 网上有关于有序字典的讨论]

vars 函数与此相似, 它返回的是包含每个成员当前值的字典. 如果你使用不带参数的 vars , 它将返回当前局部名称空间的可见元素(同 locals() 函数 ). 如 Example 1-11所表示.

1.2.3.3. Example 1-11. 使用 vars 函数

File: builtin-vars-example-1.py book = "library2" pages = 250 scripts = 350 print "the %(book)s book contains more than %(scripts)s scripts" % vars() the library book contains more than 350 scripts

1.2.4. 检查对象类型

Python 是一种动态类型语言, 这意味着给一个定变量名可以在不同的场合绑定到不同的类型上. 在接下面例子中, 同样的函数分别被整数, 浮点数, 以及一个字符串调用:

def function(value): print value function(1) function(1.0) function("one")

type 函数 (如 Example 1-12 所示) 允许你检查一个变量的类型. 这个函数会返回一个 type descriptor (类型描述符), 它对于 Python 解释器提供的每个类型都是不同的.

1.2.4.1. Example 1-12. 使用 type 函数

File: builtin-type-example-1.py def dump(value): print type(value), value dump(1) dump(1.0) dump("one") <type ‘int‘> 1 <type ‘float‘> 1.0 <type ‘string‘> one

每个类型都有一个对应的类型对象, 所以你可以使用 is 操作符 (对象身份?) 来 检查类型. (如 Example 1-13所示).

1.2.4.2. Example 1-13. 对文件名和文件对象使用 type 函数

File: builtin-type-example-2.py def load(file): if isinstance(file, type("")): file = open(file, "rb") return file.read() print len(load("samples/sample.jpg")), "bytes" print len(load(open("samples/sample.jpg", "rb"))), "bytes" 4672 bytes 4672 bytes

callable 函数, 如 Example 1-14 所示, 可以检查一个对象是否是可调用的 (无论是直接调用或是通过 apply). 对于函数, 方法, lambda 函式, 类, 以及实现了 _ _call_ _ 方法的类实例, 它都返回 True.

1.2.4.3. Example 1-14. 使用 callable 函数

File: builtin-callable-example-1.py def dump(function): if callable(function): print function, "is callable" else: print function, "is *not* callable" class A: def method(self, value): return value class B(A): def _ _call_ _(self, value): return value a = A() b = B() dump(0) # simple objects dump("string") dump(callable) dump(dump) # function dump(A) # classes dump(B) dump(B.method) dump(a) # instances dump(b) dump(b.method) 0 is *not* callable string is *not* callable <built-in function callable> is callable <function dump at 8ca320> is callable A is callable B is callable <unbound method A.method> is callable <A instance at 8caa10> is *not* callable <B instance at 8cab00> is callable <method A.method of B instance at 8cab00> is callable

注意类对象 (A 和 B) 都是可调用的; 如果调用它们, 就产生新的对象(类实例). 但是 A 类的实例不可调用, 因为它的类没有实现 _ _call_ _ 方法.

你可以在 operator 模块中找到检查对象是否为某一内建类型(数字, 序列, 或者字典等) 的函数. 但是, 因为创建一个类很简单(比如实现基本序列方法的类), 所以对这些 类型使用显式的类型判断并不是好主意.

在处理类和实例的时候会复杂些. Python 不会把类作为本质上的类型对待; 相反地, 所有的类都属于一个特殊的类类型(special class type), 所有的类实例属于一个特殊的实例类型(special instance type).

这意味着你不能使用 type 函数来测试一个实例是否属于一个给定的类; 所有的实例都是同样 的类型! 为了解决这个问题, 你可以使用 isinstance 函数,它会检查一个对象是 不是给定类(或其子类)的实例. Example 1-15 展示了 isinstance 函数的使用.

1.2.4.4. Example 1-15. 使用 isinstance 函数

File: builtin-isinstance-example-1.py class A: pass class B: pass class C(A): pass class D(A, B): pass def dump(object): print object, "=>", if isinstance(object, A): print "A", if isinstance(object, B): print "B", if isinstance(object, C): print "C", if isinstance(object, D): print "D", print a = A() b = B() c = C() d = D() dump(a) dump(b) dump(c) dump(d) dump(0) dump("string") <A instance at 8ca6d0> => A <B instance at 8ca750> => B <C instance at 8ca780> => A C <D instance at 8ca7b0> => A B D 0 => string =>

issubclass 函数与此相似, 它用于检查一个类对象是否与给定类相同, 或者是给定类的子类. 如 Example 1-16 所示.

注意, isinstance 可以接受任何对象作为参数, 而 issubclass 函数在接受非类对象参 数时会引发 TypeError 异常.

1.2.4.5. Example 1-16. 使用 issubclass 函数

File: builtin-issubclass-example-1.py class A: pass class B: pass class C(A): pass class D(A, B): pass def dump(object): print object, "=>", if issubclass(object, A): print "A", if issubclass(object, B): print "B", if issubclass(object, C): print "C", if issubclass(object, D): print "D", print dump(A) dump(B) dump(C) dump(D) dump(0) dump("string") A => A B => B C => A C D => A B D 0 => Traceback (innermost last): File "builtin-issubclass-example-1.py", line 29, in ? File "builtin-issubclass-example-1.py", line 15, in dump TypeError: arguments must be classes

1.2.5. 计算 Python 表达式

Python 提供了在程序中与解释器交互的多种方法. 例如 eval 函数将一个字符串 作为 Python 表达式求值. 你可以传递一串文本, 简单的表达式, 或者使用 内建 Python 函数. 如 Example 1-17 所示.

1.2.5.1. Example 1-17. 使用 eval 函数

File: builtin-eval-example-1.py def dump(expression): result = eval(expression) print expression, "=>", result, type(result) dump("1") dump("1.0") dump("‘string‘") dump("1.0 + 2.0") dump("‘*‘ * 10") dump("len(‘world‘)") 1 => 1 <type ‘int‘> 1.0 => 1.0 <type ‘float‘> ‘string‘ => string <type ‘string‘> 1.0 + 2.0 => 3.0 <type ‘float‘> ‘*‘ * 10 => ********** <type ‘string‘> len(‘world‘) => 5 <type ‘int‘>

如果你不确定字符串来源的安全性, 那么你在使用 eval 的时候会遇到些麻烦. 例如, 某个用户可能会使用 _ _import_ _ 函数加载 os 模块, 然后从硬盘删除文件 (如 Example 1-18 所示).

1.2.5.2. Example 1-18. 使用 eval 函数执行任意命令

File: builtin-eval-example-2.py print eval("_ _import_ _(‘os‘).getcwd()") print eval("_ _import_ _(‘os‘).remove(‘file‘)") /home/fredrik/librarybook Traceback (innermost last): File "builtin-eval-example-2", line 2, in ? File "<string>", line 0, in ? os.error: (2, ‘No such file or directory‘)

这里我们得到了一个 os.error 异常, 这说明 Python 事实上在尝试删除文件!

幸运地是, 这个问题很容易解决. 你可以给 eval 函数传递第 2 个参数, 一个定义了该表达式求值时名称空间的字典. 我们测试下, 给函数传递个空字典:

>>> print eval("_ _import_ _(‘os‘).remove(‘file‘)", {}) Traceback (innermost last): File "<stdin>", lin

以上是关于python 各模块的主要内容,如果未能解决你的问题,请参考以下文章

python中各模块变量共享的问题。

python基础学习日志day5-各模块文章导航

python中string模块各属性以及函数的用法

Python爬虫——对豆瓣图书各模块评论数与评分图形化分析

怎么看写的python代码的功能模块的核心功能

70Python核心精要:json模块和pickle模块