[国外] python核心编程(第二版) |
python作为大多数软件的通用语言受到很多cg爱好者的青睐,如果你想提高你的能力和竞争力,编程是必须要走的一步。 这是python书籍中最经典的一本指导书。本书做为由浅入深,有事例语言又通俗易懂成为python非常畅销的一本书籍,它不需要你要有c语言的基础就可以轻松入门学习,是学习python当之无愧的第一书籍,这本书对于初学者和已经有基础的所有想学习python的人都适用。 原装正版无错误且永久有效,请大家放心使用。 目录 第1部分 Python核心 第1章 欢迎来到Python世界 3 1.1 什么是Python 4 1.2 起源 4 1.3 特点 4 1.3.1 高级 4 1.3.2 面向对象 5 1.3.3 可升级 5 1.3.4 可扩展 5 1.3.5 可移植性 5 1.3.6 易学 6 1.3.7 易读 6 1.3.8 易维护 6 1.3.9 健壮性 6 1.3.10 高效的快速原型开发工具 6 1.3.11 内存管理器 7 1.3.12 解释性和(字节)编译性 7 1.4 下载和安装Python 7 1.5 运行Python 8 1.5.1 命令行上的交互式解释器 9 1.5.2 从命令行启动脚本 10 1.5.3 集成开发环境 11 1.5.4 其他的集成开发环境和执行环境 14 1.6 Python文档 15 1.7 比较Python(Python与其他语言的比较) 15 1.8 其他实现 17 1.9 练习 18 第2章 快速入门 19 2.1 程序输出,print语句及“Hello World!” 20 2.2 程序输入和raw_input()内建函数 21 2.3 注释 22 2.4 操作符 22 2.5 变量和赋值 24 2.6 数字 24 2.7 字符串 25 2.8 列表和元组 26 2.9 字典 26 2.10 代码块及缩进对齐 27 2.11 if语句 27 2.12 while循环 28 2.13 for循环和range()内建函数 28 2.14 列表解析 30 2.15 文件和内建函数open()、file() 30 2.16 错误和异常 31 2.17 函数 32 2.17.1 如何定义函数 32 2.17.2 如何调用函数 32 2.17.3 默认参数 33 2.18 类 33 2.19 模块 35 2.19.1 如何导入模块 35 2.19.2 如何访问一个模块函数或访问一个模块变量 35 2.20 实用的函数 36 2.21 练习 36 第3章 Python基础 39 3.1 语句和语法 40 3.1.1 注释(#) 40 3.1.2 继续(\) 40 3.1.3 多个语句构成代码组(:) 41 3.1.4 代码组由不同的缩进分隔 41 3.1.5 同一行书写多个语句(;) 41 3.1.6 模块 41 3.2 变量赋值 42 3.2.1 赋值操作符 42 3.2.2 增量赋值 42 3.2.3 多重赋值 43 3.2.4 “多元”赋值 43 3.3 标识符 44 3.3.1 合法的Python标识符 44 3.3.2 关键字 44 3.3.3 内建 45 3.3.4 专用下划线标识符 45 3.4 基本风格指南 45 3.4.1 模块结构和布局 46 3.4.2 在主程序中书写测试代码 48 3.5 内存管理 49 3.5.1 变量定义 49 3.5.2 动态类型 49 3.5.3 内存分配 49 3.5.4 引用计数 50 3.5.5 垃圾收集 51 3.6 第一个Python程序 51 3.7 相关模块和开发工具 54 3.8 练习 55 第4章 Python对象 56 4.1 Python 对象 57 4.2 标准类型 57 4.3 其他内建类型 58 4.3.1 类型对象和type类型对象 58 4.3.2 None——Python的Null对象 58 4.4 内部类型 59 4.4.1 代码对象 59 4.4.2 帧对象 60 4.4.3 跟踪记录对象 60 4.4.4 切片对象 60 4.4.5 省略对象 60 4.4.6 XRange 对象 60 4.5 标准类型操作符 61 4.5.1 对象值的比较 61 4.5.2 对象身份比较 61 4.5.3 布尔类型 64 4.6 标准类型内建函数 64 4.6.1 type() 64 4.6.2 cmp() 65 4.6.3 str()和repr()(及``操作符) 66 4.6.4 type()和isinstance() 67 4.6.5 Python类型操作符和内建函数总结 70 4.7 类型工厂函数 70 4.8 标准类型的分类 71 4.8.1 存储模型 71 4.8.2 更新模型 72 4.8.3 访问模型 73 4.9 不支持的类型 74 4.10 练习 75 第5章 数字 76 5.1 数字简介 77 5.1.1 如何创建数值对象并用其赋值(数字对象) 77 5.1.2 如何更新数字对象 77 5.1.3 如何删除数字对象 77 5.2 整型 77 5.2.1 布尔型 78 5.2.2 标准整型 78 5.2.3 长整型 78 5.2.4 整型和长整型的统一 79 5.3 双精度浮点型 79 5.4 复数 80 5.5 操作符 81 5.5.1 混合模式操作符 81 5.5.2 标准类型操作符 82 5.5.3 算术操作符 82 5.5.4 *位操作符(只适用于整型) 86 5.6 内建函数与工厂函数 87 5.6.1 标准类型函数 87 5.6.2 数字类型函数 87 5.6.3 仅用于整型的函数 92 5.7 其他数字类型 93 5.7.1 布尔“数” 93 5.7.2 十进制浮点型 94 5.8 相关模块 95 5.9 练习 97 第6章 序列:字符串、列表和元组 100 6.1 序列 101 6.1.1 标准类型操作符 101 6.1.2 序列类型操作符 101 6.1.3 内建函数(BIF) 106 6.2 字符串 107 6.3 字符串和操作符 109 6.3.1 标准类型操作符 109 6.3.2 序列操作符切片([]和[:]) 109 6.4 只适用于字符串的操作符 114 6.4.1 格式化操作符(%) 114 6.4.2 字符串模板: 更简单的替代品 117 6.4.3 原始字符串操作符(r/R) 118 6.4.4 Unicode字符串操作符(u/U) 119 6.5 内建函数 119 6.5.1 标准类型函数 119 6.5.2 序列类型函数 119 6.5.3 字符串类型函数 120 6.6 字符串内建函数 121 6.7 字符串的独特特性 124 6.7.1 特殊字符串和控制字符 124 6.7.2 三引号 125 6.7.3 字符串不变性 126 6.8 Unicode 127 6.8.1 术语 127 6.8.2 什么是Unicode 128 6.8.3 怎样使用Unicode 128 6.8.4 Codec是什么 129 6.8.5 编码解码 129 6.8.6 把Unicode应用到实际应用中 130 6.8.7 从现实中得来的教训 131 6.8.8 Python的Unicode支持 131 6.9 相关模块 133 6.10 字符串关键点总结 134 6.11 列表 134 6.12 操作符 136 6.12.1 标准类型操作符 136 6.12.2 序列类型操作符 136 6.12.3 列表类型操作符和列表解析 139 6.13 内建函数 139 6.13.1 标准类型函数 139 6.13.2 序列类型函数 140 6.13.3 列表类型内建函数 142 6.14 列表类型的内建函数 142 6.15 列表的特殊特性 145 6.16 元组 151 6.17 元组操作符和内建函数 152 6.17.1 标准类型操作符、序列类型操作符和内建函数 152 6.17.2 元组类型操作符和内建函数、内建方法 153 6.18 元组的特殊特性 153 6.18.1 不可变性给元组带来了什么影响 153 6.18.2 元组也不是那么“不可变” 153 6.18.3 默认集合类型 154 6.18.4 单元素元组 155 6.18.5 字典的关键字 155 6.19 相关模块 156 6.20 *拷贝Python对象、浅拷贝和深拷贝 156 6.21 序列类型小结 158 6.22 练习 160 第7章 映像和集合类型 163 7.1 映射类型:字典 164 7.1.1 如何创建字典和给字典赋值 164 7.1.2 如何访问字典中的值 165 7.1.3 如何更新字典 166 7.1.4 如何删除字典元素和字典 167 7.2 映射类型操作符 167 7.2.1 标准类型操作符 167 7.2.2 映射类型操作符 168 7.3 映射类型的内建函数和工厂函数 168 7.3.1 标准类型函数[type()、str()和cmp()] 168 7.3.2 映射类型相关的函数 170 7.4 映射类型内建方法 172 7.5 字典的键 174 7.5.1 不允许一个键对应多个值 174 7.5.2 键必须是可哈希的 175 7.6 集合类型 178 7.6.1 如何创建集合类型和给集合赋值 179 7.6.2 如何访问集合中的值 179 7.6.3 如何更新集合 179 7.6.4 如何删除集合中的成员和集合 180 7.7 集合类型操作符 180 7.7.1 标准类型操作符(所有的集合类型) 180 7.7.2 集合类型操作符(所有的集合类型) 181 7.7.3 集合类型操作符(仅适用于可变集合) 182 7.8 内建函数 183 7.8.1 标准类型函数 183 7.8.2 集合类型工厂函数 183 7.9 集合类型内建方法 184 7.9.1 方法(所有的集合方法) 184 7.9.2 方法(仅适用于可变集合) 184 7.9.3 操作符和内建方法比较 185 7.10 集合类型总结表 185 7.11 相关模块 186 7.12 练习 186 第8章 条件和循环 189 8.1 if语句 190 8.1.1 多重条件表达式 190 8.1.2 单一语句的代码块 190 8.2 else语句 190 8.3 elif(即else-if)语句 191 8.4 条件表达式(即“三元操作符”) 192 8.5 while语句 193 8.5.1 一般语法 193 8.5.2 计数循环 193 8.5.3 无限循环 194 8.6 for语句 194 8.6.1 一般语法 194 8.6.2 用于序列类型 195 8.6.3 用于迭代器类型 196 8.6.4 range()内建函数 196 8.6.5 xrange() 内建函数 198 8.6.6 与序列相关的内建函数 198 8.7 break语句 199 8.8 continue语句 199 8.9 pass语句 200 8.10 再谈else语句 200 8.11 迭代器和iter()函数 202 8.11.1 什么是迭代器 202 8.11.2 为什么要迭代器 202 8.11.3 如何迭代 202 8.11.4 使用迭代器 203 8.11.5 可变对象和迭代��� 204 8.11.6 如何创建迭代器 204 8.12 列表解析 205 8.13 生成器表达式 206 8.14 相关模块 209 8.15 练习 209 第9章 文件和输入输出 212 9.1 文件对象 213 9.2 文件内建函数(open()和file()) 213 9.2.1 工厂函数file() 214 9.2.2 通用换行符支持(UNS) 214 9.3 文件内建方法 215 9.3.1 输入 215 9.3.2 输出 215 9.3.3 文件内移动 216 9.3.4 文件迭代 216 9.3.5 其他 216 9.3.6 文件方法杂项 217 9.4 文件内建属性 219 9.5 标准文件 220 9.6 命令行参数 220 9.7 文件系统 221 9.8 文件执行 227 9.9 永久存储模块 227 9.9.1 pickle和marshal模块 227 9.9.2 DBM风格的模块 228 9.9.3 shelve模块 228 9.10 相关模块 229 9.11 练习 230 第10章 错误和异常 234 10.1 什么是异常 235 10.1.1 错误 235 10.1.2 异常 235 10.2 Python 中的异常 236 10.3 检测和处理异常 237 10.3.1 try-except语句 238 10.3.2 包装内建函数 238 10.3.3 带有多个except的try语句 240 10.3.4 处理多个异常的except语句 241 10.3.5 捕获所有异常 242 10.3.6 “异常参数” 244 10.3.7 在应用使用我们封装的函数 245 10.3.8 else子句 247 10.3.9 finally子句 248 10.3.10 try-finally语句 248 10.3.11 try-except-else-finally:厨房一锅端 250 10.4 上下文管理 251 10.4.1 with语句 251 10.4.2 *上下文管理协议 252 10.5 *字符串作为异常 252 10.6 触发异常 253 10.7 断言 254 10.8 标准异常 255 10.9 *创建异常 257 10.10 (现在)为什么用异常 262 10.11 到底为什么要异常 263 10.12 异常和sys模块 263 10.13 相关模块 264 10.14 练习 264 第11章 函数和函数式编程 266 11.1 什么是函数? 267 11.1.1 函数vs过程 267 11.1.2 返回值与函数类型 267 11.2 调用函数 268 11.2.1 函数操作符 268 11.2.2 关键字参数 269 11.2.3 默认参数 269 11.2.4 参数组 269 11.3 创建函数 272 11.3.1 def语句 272 11.3.2 声明与定义比较 272 11.3.3 前向引用 272 11.3.4 函数属性 273 11.3.5 内部/内嵌函数 274 11.3.6 *函数(与方法)装饰器 275 11.4 传递函数 278 11.5 Formal Arguments 279 11.5.1 位置参数 279 11.5.2 默认参数 279 11.6 可变长度的参数 282 11.6.1 非关键字可变长参数(元组) 282 11.6.2 关键字变量参数(字典) 283 11.6.3 调用带有可变长参数对象函数 284 11.7 函数式编程 286 11.7.1 匿名函数与lambda 286 11.7.2 内建函数apply()、filter()、map()、reduce() 288 11.7.3 偏函数应用 293 11.8 变量作用域 295 11.8.1 全局变量与局部变量 295 11.8.2 globa语句 296 11.8.3 作用域的数字 297 11.8.4 闭包 298 11.8.5 作用域和lambda 302 11.8.6 变量作用域和名称空间 304 11.9 *递归 304 11.10 生成器 305 11.10.1 简单的生成器特性 305 11.10.2 加强的生成器特性 307 11.11 练习 308 第12章 模块 310 12.1 什么是模块 311 12.2 模块和文件 311 12.2.1 模块名称空间 311 12.2.2 搜索路径和路径搜索 311 12.3 名称空间 312 12.3.1 名称空间与变量作用域比较 313 12.3.2 名称查找、确定作用域、覆盖 314 12.3.3 无限制的名称空间 314 12.4 导入模块 315 12.4.1 import语句 315 12.4.2 from-import语句 315 12.4.3 多行导入 316 12.4.4 扩展的import语句(as) 316 12.5 模块导入的特性 316 12.5.1 载入时执行模块 316 12.5.2 导入(import)和加载(load) 317 12.5.3 导入到当前名称空间的名称 317 12.5.4 被导入到导入者作用域的名字 317 12.5.5 关于__future__ 318 12.5.6 警告框架 318 12.5.7 从ZIP文件中导入模块 319 12.5.8 “新的”导入钩子 319 12.6 模块内建函数 319 12.6.1 __import__() 319 12.6.2 globals()和locals() 320 12.6.3 reload() 320 12.7 包 321 12.7.1 目录结构 321 12.7.2 使用from-import导入包 322 12.8 模块的其他特性 323 12.8.1 自动载入的模块 323 12.8.2 阻止属性导入 323 12.8.3 不区分大小的导入 323 12.8.4 源代码编码 324 12.8.5 导入循环 324 12.8.6 模块执行 325 12.9 相关模块 325 12.10 练习 326 第13章 面向对象编程 327 13.1 引言 328 13.2 面向对象编程 333 13.2.1 面向对象设计与面向对象编程的关系 333 13.2.2 现实中的问题 334 13.2.3 *常用术语 334 13.3 类 335 13.3.1 创建类 336 13.3.2 声明与定义 336 13.4 类属性 336 13.4.1 类的数据属性 337 13.4.2 Methods 337 13.4.3 决定类的属性 338 13.4.4 特殊的类属性 339 13.5 实例 340 13.5.1 初始化:通过调用类对象来创建实例 340 13.5.2 __init__()“构造器”方法 341 13.5.3 __new__()“构造器”方法 342 13.5.4 __del__()“解构器”方法 342 13.6 实例属性 344 13.6.1 “实例化”实例属性(或创建一个更好的构造器) 344 13.6.2 查看实例属性 346 13.6.3 特殊的实例属性 346 13.6.4 建类型属性 347 13.6.5 实例属性vs类属性 348 13.7 绑定和方法调用 350 13.7.1 调用绑定方法 351 13.7.2 调用非绑定方法 351 13.8 静态方法和类方法 352 13.8.1 staticmethod()和classmethod()内建函数 352 13.8.2 使用函数修饰符 353 13.9 组合 353 13.10 子类和派生 354 13.11 继承 355 13.11.1 __bases__类属性 356 13.11.2 通过继承覆盖方法 356 13.11.3 从标准类型派生 358 13.11.4 多重继承 360 13.12 类、实例和其他对象的内建函数 363 13.12.1 issubclass() 363 13.12.2 isinstance() 363 13.12.3 hasattr()、getattr()、setattr()、delattr() 364 13.12.4 dir() 365 13.12.5 super() 365 13.12.6 vars() 366 13.13 用特殊方法定制类 367 13.13.1 简单定制(RoundFloat2) 370 13.13.2 数值定制(Time60) 372 13.13.3 迭代器(RandSeq和AnyIter) 375 13.13.4 *多类型定制(NumStr) 377 13.14 私有化 381 13.15 *授权 382 13.15.1 包装 382 13.15.2 实现授权 383 13.16 新式类的高级特性(Python 2.2+) 388 13.16.1 新式类的通用特性 388 13.16.2 __slots__类属性 389 13.16.3 __getattribute__()特殊方法 390 13.16.4 描述符 390 13.16.5 元类和__metaclass__ 399 13.17 相关模块和文档 403 13.18 练习 405 第14章 执行环境 410 14.1 可调用对象 411 14.1.1 函数 411 14.1.2 方法 413 14.1.3 类 415 14.1.4 类的实例 415 14.2 代码对象 416 14.3 可执行的对象声明和内建函数 416 14.3.1 callable() 417 14.3.2 compile() 417 14.3.3 eval() 418 14.3.4 exec 419 14.3.5 input() 420 14.3.6 使用Python在运行时生成和执行Python代码 420 14.4 执行其他(Python)程序 426 14.4.1 导入 426 14.4.2 execfile() 427 14.4.3 将模块作为脚本执行 428 14.5 执行其他(非Python)程序 428 14.5.1 os.system() 429 14.5.2 os.popen() 430 14.5.3 os.fork()、o****ec*()、os.wait*() 431 14.5.4 os.spawn*() 432 14.5.5 subprocess 模块 432 14.5.6 相关函数 433 14.6 受限执行 433 14.7 结束执行 434 14.7.1 sy****it() and SystemExit 434 14.7.2 sy****itfunc() 435 14.7.3 o*****it() 函数 435 14.7.4 os.kill() Function 435 14.8 各种操作系统接口 436 14.9 相关模块 436 14.10 练习 437 第2部分 高级主题 第15章 正则表达式 441 15.1 引言/动机 442 15.2 正则表达式使用的特殊符号和字符 443 15.2.1 用管道符号(|)匹配多个正则表达式模式 444 15.2.2 匹配任意一个单个的字符(.) 444 15.2.3 从字符串的开头或结尾或单词边界开始匹配(^/$ /\b /\B ) 444 15.2.4 创建字符类([]) 445 15.2.5 指定范围(-)和否定(^) 445 15.2.6 使用闭包操作符(*,+,?,{})实现多次出现/重复匹配 446 15.2.7 特殊字符表示、字符集 446 15.2.8 用圆括号(())组建组 447 15.3 正则表达式和Python语言 447 15.3.1 re模块:核心函数和方法 448 15.3.2 使用compile()编译正则表达式 449 15.3.3 匹配对象和group()、groups()方法 449 15.3.4 用match()匹配字符串 449 15.3.5 search()在一个字符串中查找一个模式(搜索与匹配的比较) 450 15.3.6 匹配多个字符串(|) 451 15.3.7 匹配任意单个字符(.) 451 15.3.8 创建字符集合([]) 452 15.3.9 重复、特殊字符和子组 452 15.3.10 从字符串的开头或结尾匹配及在单词边界上的匹配 454 15.3.11 用findall()找到每个出现的匹配部分 455 15.3.12 用sub()(和subn())进行搜索和替换 455 15.3.13 用split()分割(分隔模式) 455 15.4 正则表达式示例 458 15.4.1 匹配一个字符串 460 15.4.2 搜索与匹配的比较,“贪婪”匹配 461 15.5 练习 463 第16章 网络编程 465 16.1 引言 466 16.1.1 什么是客户端/服务器架构 466 16.1.2 客户端/服务器网络编程 468 16.2 套接字:通信端点 468 16.2.1 什么是套接字 468 16.2.2 套接字地址:主机与端口 469 16.2.3 面向连接与无连接 469 16.3 Python中的网络编程 469 16.3.1 socket()模块函数 470 16.3.2 套接字对象(内建)方法 470 16.3.3 创建一个TCP服务器 471 16.3.4 创建TCP客户端 473 16.3.5 运行*客户端与TCP服务器 474 16.3.6 创建一个UDP服务器 475 16.3.7 创建一个UDP客户端 476 16.3.8 执行UDP服务器和客户端 477 16.3.9 Socket模块属性 478 16.4 *SocketServer模块 479 16.4.1 创建一个SocketServerTCP服务器 479 16.4.2 创建SocketServerTCP客户端 480 16.4.3 执行TCP服务器和客户端 481 16.5 Twisted框架介绍 482 16.5.1 创建一个Twisted Reactor TCP服务器 482 16.5.2 创建一个Twisted Reactor TCP客户端 483 16.5.3 执行TCP服务器和客户端 484 16.6 相关模块 484 16.7 练习 485 第17章 网络客户端编程 487 17.1 什么是因特网客户端 488 17.2 文件传输 488 17.2.1 文件传输网际协议 488 17.2.2 文件传输协议(FTP) 488 17.2.3 Python和FTP 489 17.2.4 ftplib.FTP类方法 490 17.2.5 交互式FTP示例 490 17.2.6 客户端FTP程序举例 491 17.2.7 FTP的其他方面 492 17.3 网络新闻 493 17.3.1 Usenet与新闻组 493 17.3.2 网络新闻传输协议(NNTP) 493 17.3.3 Python和NNTP 494 17.3.4 nntplib.NNTP类方法 494 17.3.5 交互式NNTP举例 495 17.3.6 客户端程序NNTP举例 496 17.3.7 NNTP的其他方面 500 17.4 电子邮件 500 17.4.1 电子邮件系统组件和协议 500 17.4.2 发送电子邮件 501 17.4.3 Python和SMTP 501 17.4.4 smtplib.SMTP类方法 502 17.4.5 交互式SMTP示例 502 17.4.6 SMTP的其他方面 503 17.4.7 接收电子邮件 503 17.4.8 POP和IMAP 504 17.4.9 Python和POP3 504 17.4.10 交互式POP3举例 505 17.4.11 poplib.POP3类方法 506 17.4.12 客户端程序SMTP和POP3举例 506 17.5 相关模块 508 17.5.1 电子邮件 508 17.5.2 其他网络协议 508 17.6 练习 509 第18章 多线程编程 512 18.1 引言/动机 513 18.2 线程和进程 513 18.2.1 什么是进程 513 18.2.2 什么是线程 514 18.3 Python、线程和全局解释器锁 514 18.3.1 全局解释器锁(GIL) 514 18.3.2 退出线程 515 18.3.3 在Python中使用线程 515 18.3.4 没有线程支持的情况 515 18.3.5 Python的threading模块 516 18.4 thread模块 517 18.5 threading模块 520 18.5.1 Thread类 521 18.5.2 斐波那契、阶乘和累加和 525 18.5.3 threading模块中的其他函数 528 18.5.4 生产者-消费者问题和Queue模块 528 18.6 相关模块 531 18.7 练习 531 第19章 图形用户界面编程 532 19.1 简介 533 19.1.1 什么是Tcl、Tk和Tkinter 533 19.1.2 安装和使用Tkinter 533 19.1.3 客户端/服务器架构 534 19.2 Tkinter与Python编程 534 19.2.1 Tkinter模块:把Tk引入你的程序 534 19.2.2 GUI程序开发简介 534 19.2.3 顶层窗口:Tkinter.Tk() 535 19.2.4 Tk组件 535 19.3 Tkinter举例 536 19.3.1 标签组件 536 19.3.2 按钮组件 537 19.3.3 标签和按钮组件 537 19.3.4 标签、按钮和进度条组件 538 19.3.5 偏函数应用举例 539 19.3.6 中级Tkinter范例 541 19.4 其他GUI简介 545 19.4.1 Tk Interface eXtensions (Tix) 546 19.4.2 Python MegaWidgets (PMW) 547 19.4.3 wxWidgets和wxPython 547 19.4.4 GTK+和PyGTK 549 19.5 相关模块和其他GUI 551 19.6 练习 553 第20章 Web编程 554 20.1 介绍 555 20.1.1 Web应用:客户端/服务器计算 555 20.1.2 因特网 555 20.2 使用Python进行Web应用:创建一个简单的Web客户端 556 20.2.1 统一资源定位符 556 20.2.2 urlparse模块 557 20.2.3 urllib模块 558 20.2.4 urllib2模块 561 20.3 高级Web客户端 563 20.4 CGI:帮助Web服务器处理客户端数据 567 20.4.1 CGI介绍 567 20.4.2 CGI应用程序 568 20.4.3 cgi模块 569 20.5 建立CGI应用程序 569 20.5.1 建立Web服务器 569 20.5.2 建立表单页 569 20.5.3 生成结果页 570 20.5.4 生成表单和结果页面 571 20.5.5 全面交互的Web站点 574 20.6 在CGI中使用Unicode编码 577 20.7 高级CGI 579 20.7.1 Mulitipart表单提交和文件的上传 579 20.7.2 多值字段 579 20.7.3 cookie 579 20.7.4 使用高级CGI 580 20.8 Web(HTTP)服务器 587 20.9 相关模块 589 20.10 练习 590 第21章 数据库编程 593 21.1 介绍 594 21.1.1 持久存储 594 21.1.2 基本的数据库操作和SQL语言 594 21.1.3 数据库和Python 596 21.2 Python数据库应用程序程序员接口(DB-API) 596 21.2.1 模块属性 597 21.2.2 连接对象 598 21.2.3 游标对象 599 21.2.4 类型对象和构造器 600 21.2.5 关系数据库 601 21.2.6 数据库和Python:接口程序 602 21.2.7 使用数据库接口程序举例 602 21.3 对象-关系管理器(ORM) 611 21.3.1 考虑对象,而不是SQL 611 21.3.2 Python和ORM 611 21.3.3 雇员数据库举例 611 21.3.4 总结 620 21.4 相关模块 620 21.5 练习 621 第22章 扩展Python 623 22.1 引言/动机 624 22.1.1 什么是扩展 624 22.1.2 为什么要扩展Python 624 22.2 创建Python扩展 625 22.2.1 创建您的应用程序代码 625 22.2.2 用样板来包装你的代码 627 22.2.3 编译 630 22.2.4 导入和测试 632 22.2.5 引用计数 633 22.2.6 线程和全局解释器锁(GIL) 635 22.3 相关话题 636 22.4 练习 637 第23章 其他话题 638 23.1 Web服务 639 23.2 用Win32的COM来操作微软Office 641 23.2.1 客户端COM编程 641 23.2.2 微软Excel 642 23.2.3 微软Word 644 23.2.4 微软PowerPoint 645 23.2.5 微软Outlook 646 23.2.6 中等规模的例子 648 23.3 用Jython写Python和Java的程序 650 23.3.1 什么是Jython 650 23.3.2 Swing GUI开发(Java或者Python!) 651 23.4 练习 653 |