Python Web 开发学习实录


Web 程序员成功之路 Python Web 开发学习实录 李 勇 王文强 编著 北 京 内 容 简 介 Python 是目前流行的动态脚本语言之一。 本书共 15 章,由浅入深、全面系统地介绍了使用 Python 语言进行程序开发的知识和技巧。内容包括 Python 的安装和环境配置、Python 的基本语法、流程控制、模块和函数、数据结构、字符串与正则表达式、面向对 象编程、文件处理、程序异常和处理、数据库连接和持久化操作、Python 网络功能、Python 与 HTML、XML 的应用、Python 图像界面的处理、Python 的 Web 开发等。 本书适合 Python 爱好者、大中专院校的学生、社会培训班的学生以及使用 Python 语言进行系统管理、GUI 开发、Web 开发、数据库编程和网络编程的程序员使用。 本书封面贴有清华大学出版社防伪标签,无标签者不得销售。 版权所有,侵权必究。侵权举报电话:010-62782989 13701121933 图书在版编目(CIP)数据 Python Web 开发学习实录/李勇,王文强编著. --北京:清华大学出版社,2011.10 (Web 程序员成功之路) ISBN 978-7-302-26633-4 Ⅰ. ①P… Ⅱ. ①李… ②王… Ⅲ. ①软件工具—程序设计 Ⅳ. ①TP311.56 中国版本图书馆 CIP 数据核字(2011)第 174540 号 责任编辑:张 瑜 装帧设计:杨玉兰 责任校对:王 晖 责任印制: 出版发行:清华大学出版社 地 址:北京清华大学学研大厦 A 座 http://www.tup.com.cn 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969, c-service@tup.tsinghua.edu.cn 质量反馈:010-62772015, zhiliang@tup.tsinghua.edu.cn 印 刷 者: 装 订 者: 经 销:全国新华书店 开 本:190×260 印 张:33.25 字 数:803 千字 附 DVD 1 张 版 次:2011 年 10 月第 1 版 印 次:2011 年 10 月第 1 次印刷 印 数:1~4000 定 价:66.00 元 ——————————————————————————————————————————————— 前 言 当前,Python 已经成为流行的程序设计语言之一,被越来越多的人作为首选语言来学习和 应用。作为一种解释型的语言,Python 具有高效的数据结构,提供了一种简单但很有效的方式 以便进行面向对象编程。Python 高雅的语法、动态的数据类型,以及它的解释器,使其成为大 多数平台上应用于各领域的理想的脚本语言以及开发环境。 Python 解释器及其扩展标准库的源码和编译版本,可以从 Python 的 Web 站点 http://www.python.org/以及所有镜像站上免费获得,并且可以自由发布。该站点上还提供了 Python 的一些第三方模块、程序、工具以及附加的文档。 Python 解释器很容易通过 C/C++(或者其他可以由 C 调用的语言)来实现功能和数据结构的 扩展。因此 Python 很适于作为定制应用的一种扩展语言。为了使广大读者既能了解 Python 语 言的基础知识,又能将 Python 语言应用于特定领域(如 Web 开发),本书全面地介绍了用 Python 语言进行程序开发的相关知识。学习完本书之后,相信读者能够掌握 Python 语言,并且可以 使用 Python 语言进行实际项目的开发。 本书内容 第 1 章 欢迎来到 Python 世界。本章首先介绍 Python 的背景、特性和应用,然后详细介 绍如何安装 Python 到本机,接着简单介绍 Python 的解释器和开发工具,最后介绍 Python 程序 的保存及运行。 第 2 章 练就扎实的基本功。本章首先介绍 Python 语言的变量声明和使用,然后介绍 Python 的命令、数据类型和表达式,最后简单介绍在 Python 语言中如何为代码行添加注释以 及 Python 的运算符。 第 3 章 控制结构。本章首先介绍条件语句的使用,然后详细介绍循环语句以及迭代器的 使用,最后介绍循环中的跳转语句和其他语句的用法。 第 4 章 可复用的函数和模块。本章首先介绍 Python 程序的结构设计、模块的创建和如 何导入模块,然后介绍在 Python 语言中模块的内置函数,最后介绍如何定义函数和调用函数。 第 5 章 数据结构。本章首先介绍列表的创建和使用,然后介绍元组的创建、访问和操作, 最后介绍字典的创建、访问和操作,以及有关序列的常识。 第 6 章 字符串与正则表达式。本章首先介绍字符串的拼接、格式化,然后介绍如何截取 字符串、比较字符串、搜索字符串和替换字符串,最后介绍如何转换时间字符串。 第 7 章 面向对象编程。本章首先讲解封装、多态的使用,然后介绍如何创建类和对象, 最后介绍类的继承和特性。 第 8 章 基于文件的交互。本章首先介绍如何打开一个文件和创建文件,然后介绍如何对 文件进行增、删、改、查的操作,最后介绍如何复制文件、修改文件名称和关闭文件,同时介 绍文件的一些内置函数、方法和属性等知识。 第 9 章 构造可容错的应用程序。本章首先介绍如何使用 try ...except 语句、try ...finally 语句捕捉异常,然后介绍如何使用 raise 语句抛出异常,最后介绍 assert 语句的使用方法以及程 II Python Web 开发学习实录 序的调试技巧。 第 10 章 持久化的数据。本章首先介绍持久化存储的概念,然后介绍数据库的连接及游 标的使用,最后介绍如何使用持久化模块来读写数据以及如何操作嵌入式数据库 SQLite。 第 11 章 让信息自由联通——Python 网络功能。本章首先介绍 TCP/IP 网络互连模式,然 后介绍 Socket 的基础知识,并详细地介绍服务器和客户端之间的通信技术,最后介绍如何实现 异步通信技术。 第 12 章 构造可兼容的应用程序。本章首先介绍 HTML 的语法规范以及对 URL 字符串 的处理,然后介绍如何获取 HTML 文档资源,最后介绍如何解析 HTML 文档。 第 13 章 应知应会技能之 XML 处理。本章首先介绍 XML 文档的结构,然后介绍如何使 用 SAX 处理 XML 文档以及如何使用 DOM 解析 XML 数据,最后介绍可扩展样式表语言 XSL。 第 14 章 图形用户界面。本章首先介绍 WxPython 的程序结构,然后介绍 WxPython 的基 本组件和常用组件,最后介绍 WxPython 库中的菜单控件。 第 15 章 Python 的 Web 开发之 Django 框架应用。本章首先介绍 Django 框架中的 MVC 架构,然后介绍 Django 框架的开发环境搭建,最后介绍 Django 框架的应用和高级应用。 本书特色 本书的大量内容来自真实 Python 项目,力求通过读者实际操作时的问题解答方式使读者 更容易掌握 Python 应用开发。本书难度适中,内容由浅入深,实用性强,覆盖面广,条理 清晰。 (1) 结构独特。通过“网络教学、基础知识、实例描述、实例应用、运行结果、实例分析” 形式将每个知识点与实际应用中的问题相结合。 (2) 形式新颖。用准确的语言总结概念,用直观的图示演示过程,用详细的注释解释代码, 用形象的比方帮助记忆。 (3) 技术文档。将一些非常简单的知识点或者理论性的内容安排在这里。通常这些文档让 读者了解有关的概念和术语。 (4) 内容丰富。涵盖了实际开发中 Python 技术所遇到的 XML、HTML 和 Django 等方面的 热点问题。 (5) 随书光盘。本书为实例配备了视频教学文件,读者可以通过视频文件更加直观地学习 Python 的使用方法和知识。 (6) 网站技术支持。读者在学习或者工作的过程中,如果遇到实际问题,可以直接登录 www.itzcn.com 与我们取得联系,作者会在第一时间内给予帮助或建议。 (7) 贴心的提示。为了便于读者阅读,全书还穿插了一些技巧、提示等小贴士,并有各自 的体例约定。 提示:通常是一些贴心的提醒信息,让读者加深印象或提供建议和解决问题的方法。 注意:提出学习过程中需要特别注意的一些知识点和内容,或者相关信息。 技巧:通过简短的文字,指出知识点在应用时的一些小窍门。 读者对象 本书具有知识全面、实例精彩、指导性强的特点,力求以全面的知识性及丰富的实例来指 导读者透彻地学习 Python 各方面的知识。本书可以作为 Python 的入门书籍,也可以帮助中级 窗内网永久网址 www.itzcn.com 前言 III 读者提高技能,对高级读者也有一定的启发意义。 参编人员 本书主要由李勇、王文强编写,其他参与编写、资料整理、程序开发的人员还有陈军红、 郝军启、王俊伟、赵振方、张芳芳、祝红涛、徐牛犇等。 由于编者水平有限,书中难免存在不足和疏漏之处,恳请读者批评指正。 本书适合以下人员阅读学习:  Python 语言爱好者  大中专院校的学生  社会各类培训班学生  从事各种工作的程序员  具有其他编程使用经验的开发人员 窗内网永久网址 www.itzcn.com 目 录 第 1 章 欢迎来到 Python 世界 ........................ 1 1.1 Python 简介 ................................................ 2 视频教学:11 分钟 ......................... 2 1.2 安装 Python(Windows 安装) ...................... 4 视频教学:8 分钟 ........................... 4 1.3 使用带提示符的解释器 ............................. 8 视频教学:10 分钟 ......................... 8 1.3.1 基础知识——Python 解释器 ......... 8 1.3.2 实例描述 ....................................... 11 1.3.3 实例应用 ....................................... 11 1.3.4 运行结果 ....................................... 12 1.3.5 实例分析 ....................................... 12 1.4 Python 集成开发环境 ............................... 12 视频教学:14 分钟 ....................... 12 1.5 保存并执行程序 ....................................... 16 视频教学:6 分钟 ......................... 16 1.5.1 基础知识——程序的保存 和运行 ........................................... 16 1.5.2 实例描述 ....................................... 17 1.5.3 实例应用 ....................................... 17 1.5.4 运行结果 ....................................... 17 1.5.5 实例分析 ....................................... 18 1.6 常见问题解答 ........................................... 18 1.6.1 关于 Python 版本的问题 .............. 18 1.6.2 Python 的 print 问题 ..................... 18 1.6.3 关于 Python 编程的问题 .............. 19 1.7 习题........................................................... 19 第 2 章 练就扎实的基本功 ............................. 21 2.1 Python 的编码规则................................... 22 视频教学:16 分钟 ....................... 22 2.1.1 基础知识——代码缩进 与冒号 ........................................... 22 2.1.2 基础知识——使用空行分隔 代码 ............................................... 23 2.1.3 基础知识——命名规则................ 24 2.1.4 基础知识——为代码添加注释 .... 25 2.1.5 基础知识——语句的分隔 ............ 26 2.2 数值 ........................................................... 27 视频教学:10 分钟 ....................... 27 2.3 制作超市购物清单 ................................... 30 视频教学:7 分钟 ......................... 30 2.3.1 基础知识——标识符的命名 ........ 30 2.3.2 基础知识——变量与赋值 ............ 31 2.3.3 基础知识——局部变量................ 31 2.3.4 基础知识——全局变量................ 33 2.3.5 实例描述 ....................................... 34 2.3.6 实例应用 ....................................... 34 2.3.7 运行结果 ....................................... 35 2.3.8 实例分析 ....................................... 35 2.4 用户登录验证 ........................................... 35 视频教学:19 分钟 ....................... 35 2.4.1 基础知识——字符串的声明 与表示 ........................................... 36 2.4.2 基础知识——输入与输出 ............ 38 2.4.3 实例描述 ....................................... 40 2.4.4 实例应用 ....................................... 40 2.4.5 运行结果 ....................................... 40 2.4.6 实例分析 ....................................... 41 2.5 计算圆的周长和面积 ............................... 41 视频教学:13 分钟 ....................... 41 2.5.1 基础知识——算术运算符 与算术表达式 ............................... 41 2.5.2 基础知识——关系运算符 与关系表达式 ............................... 43 2.5.3 基础知识——逻辑运算符 与逻辑表达式 ............................... 44 VI Python Web 开发学习实录 2.5.4 基础知识——运算符的 优先级 ........................................... 45 2.5.5 实例描述 ....................................... 46 2.5.6 实例应用 ....................................... 46 2.5.7 运行结果 ....................................... 47 2.5.8 实例分析 ....................................... 48 2.6 常见问题解答 ........................................... 48 2.6.1 Python 中 3 种字符串引号的 区别 ............................................... 48 2.6.2 Python 中文编码问题 ................... 48 2.7 习题........................................................... 49 第 3 章 控制结构 ............................................... 51 3.1 制作有趣的炒菜流程 ............................... 52 视频教学:6 分钟 ......................... 52 3.1.1 基础知识——条件语句 ............... 52 3.1.2 实例描述 ....................................... 54 3.1.3 实例应用 ....................................... 55 3.1.4 运行结果 ....................................... 55 3.1.5 实例分析 ....................................... 55 3.2 九九乘法表 ............................................... 56 视频教学:10 分钟 ....................... 56 3.2.1 基础知识——循环语句 ............... 56 3.2.2 实例描述 ....................................... 61 3.2.3 实例应用 ....................................... 62 3.2.4 运行结果 ....................................... 62 3.2.5 实例分析 ....................................... 62 3.3 实现关键字搜索功能 ............................... 62 视频教学:5 分钟 ......................... 63 3.3.1 基础知识——迭代工具 ............... 63 3.3.2 实例描述 ....................................... 64 3.3.3 实例应用 ....................................... 64 3.3.4 运行结果 ....................................... 64 3.3.5 实例分析 ....................................... 65 3.4 为歌曲列表制作新颖的循环模式 ........... 65 视频教学:7 分钟 ......................... 65 3.4.1 基础知识——跳转语句 ............... 65 3.4.2 实例描述 ....................................... 68 3.4.3 实例应用 ....................................... 69 3.4.4 运行结果 ....................................... 69 3.4.5 实例分析 ....................................... 70 3.5 其他语句 ................................................... 70 视频教学:6 分钟 ......................... 70 3.5.1 基础知识——pass 语句 ................ 71 3.5.2 基础知识——del 语句 .................. 71 3.5.3 基础知识——exec 语句 ............... 72 3.6 常见问题解答 ........................................... 72 3.6.1 Python 中语句嵌套问题 ............... 72 3.6.2 Python 中语句缩进问题 ............... 73 3.6.3 Python 中循环语句问题 ............... 74 3.7 习题 ........................................................... 75 第 4 章 可复用的函数和模块 ......................... 79 4.1 Python 程序的结构 ................................... 80 视频教学:4 分钟 ......................... 80 4.2 计算相对年龄 ........................................... 81 视频教学:4 分钟 ......................... 81 4.2.1 基础知识——函数的定义 ............ 81 4.2.2 实例描述 ....................................... 82 4.2.3 实例应用 ....................................... 82 4.2.4 运行结果 ....................................... 82 4.2.5 实例分析 ....................................... 83 4.3 验证用户注册信息 ................................... 83 视频教学:11 分钟 ....................... 83 4.3.1 基础知识——函数形参 与默认参数值 ............................... 83 4.3.2 实例描述 ....................................... 86 4.3.3 实例应用 ....................................... 86 4.3.4 运行结果 ....................................... 87 4.3.5 实例分析 ....................................... 88 4.4 判断是否闰年 ........................................... 88 视频教学:5 分钟 ......................... 88 4.4.1 基础知识——函数的返回值 ........ 88 4.4.2 实例描述 ....................................... 90 4.4.3 实例应用 ....................................... 90 4.4.4 运行结果 ....................................... 90 4.4.5 实例分析 ....................................... 90 目录 VII 4.5 调用模块函数添加用户 ........................... 91 视频教学:5 分钟 ......................... 91 4.5.1 基础知识——模块的创建 ........... 91 4.5.2 实例描述 ....................................... 92 4.5.3 实例应用 ....................................... 92 4.5.4 运行结果 ....................................... 93 4.5.5 实例分析 ....................................... 93 4.6 重新设置安全密码 ................................... 93 视频教学:6 分钟 ......................... 94 4.6.1 基础知识——模块的导入 ........... 94 4.6.2 实例描述 ....................................... 95 4.6.3 实例应用 ....................................... 95 4.6.4 运行结果 ....................................... 96 4.6.5 实例分析 ....................................... 97 4.7 模拟购物 ................................................... 97 视频教学:5 分钟 ......................... 97 4.7.1 基础知识——模块属性的 介绍 ............................................... 97 4.7.2 实例描述 ....................................... 99 4.7.3 实例应用 ....................................... 99 4.7.4 运行结果 ..................................... 100 4.7.5 实例分析 ..................................... 100 4.8 使用模块内置函数生成验证码 ............. 101 视频教学:13 分钟 ..................... 101 4.8.1 基础知识——模块的内置 函数 ............................................. 101 4.8.2 实例描述 ..................................... 105 4.8.3 实例应用 ..................................... 105 4.8.4 运行结果 ..................................... 105 4.8.5 实例分析 ..................................... 106 4.9 常见问题解答 ......................................... 106 4.9.1 导入 Python 模块引起的问题 .... 106 4.9.2 关于 Python 函数不加括号的 问题 ............................................. 107 4.10 习题 ....................................................... 107 第 5 章 数据结构 ............................................. 111 5.1 Python 的“苦力”——列表 ................. 112 视频教学:22 分钟 ..................... 112 视频教学:9 分钟 ....................... 112 5.1.1 基础知识——列表的创建 .......... 112 5.1.2 基础知识——列表的使用 .......... 116 5.1.3 基础知识——列表的查找、 排序与反转 ................................. 120 5.1.4 基础知识——用列表实现 堆栈 ............................................. 121 5.1.5 实例描述 ..................................... 123 5.1.6 实例应用 ..................................... 124 5.1.7 运行结果 ..................................... 124 5.1.8 实例分析 ..................................... 125 5.2 不可变序列——元组 ............................. 125 视频教学:18 分钟 ..................... 125 5.2.1 基础知识——元组的创建 .......... 125 5.2.2 基础知识——元组的访问 .......... 127 5.2.3 基础知识——元组的遍历 .......... 129 5.2.4 实例描述 ..................................... 130 5.2.5 实例应用 ..................................... 131 5.2.6 运行结果 ..................................... 132 5.2.7 实例分析 ..................................... 132 5.3 使用字典实现用户账号管理.................. 132 视频教学:6 分钟 ....................... 133 视频教学:13 分钟 ..................... 133 视频教学:15 分钟 ..................... 133 5.3.1 基础知识——字典的创建 .......... 133 5.3.2 基础知识——字典的基本 操作 ............................................. 134 5.3.3 基础知识——字典的方法 .......... 138 5.3.4 实例描述 ..................................... 142 5.3.5 实例应用 ..................................... 142 5.3.6 运行结果 ..................................... 144 5.3.7 实例分析 ..................................... 145 5.4 序列 ......................................................... 145 视频教学:8 分钟 ....................... 145 5.4.1 基础知识——序列的索引 .......... 145 5.4.2 基础知识——序列的分片 .......... 146 VIII Python Web 开发学习实录 5.4.3 基础知识——序列相连 ............. 147 5.4.4 基础知识——序列的乘法 ......... 147 5.5 常见问题解答 ......................................... 148 5.5.1 检测列表中的元素 ..................... 148 5.5.2 Python 字典排序问题 ................. 148 5.6 习题......................................................... 149 第 6 章 字符串与正则表达式 ...................... 151 6.1 邮箱注册系统 ......................................... 152 视频教学:17 分钟 ..................... 152 6.1.1 基础知识——基础操作 ............. 152 6.1.2 基础知识——字符串索引 和分片 ......................................... 153 6.1.3 基础知识——字符串转换 ......... 154 6.1.4 实例描述 ..................................... 155 6.1.5 实例应用 ..................................... 155 6.1.6 运行结果 ..................................... 156 6.1.7 实例分析 ..................................... 157 6.2 打印客户凭条 ......................................... 157 视频教学:5 分钟 ....................... 157 6.2.1 基础知识——字符串格式化 ..... 157 6.2.2 实例描述 ..................................... 158 6.2.3 实例应用 ..................................... 158 6.2.4 运行结果 ..................................... 159 6.2.5 实例分析 ..................................... 159 6.3 列车路线查询系统 ................................. 159 视频教学:6 分钟 ....................... 159 6.3.1 基础知识——join()函数 ............ 159 6.3.2 实例描述 ..................................... 160 6.3.3 实例应用 ..................................... 160 6.3.4 运行结果 ..................................... 160 6.3.5 实例分析 ..................................... 161 6.4 获取邮箱用户名 ..................................... 161 视频教学:9 分钟 ....................... 161 6.4.1 基础知识——split()函数............ 161 6.4.2 基础知识——strip()函数 ........... 162 6.4.3 实例描述 ..................................... 162 6.4.4 实例应用 ..................................... 162 6.4.5 运行结果 ..................................... 163 6.4.6 实例分析 ..................................... 163 6.5 上传图片格式判断 ................................. 163 视频教学:6 分钟 ....................... 163 6.5.1 基础知识——startswith() 函数 ............................................. 164 6.5.2 基础知识——endswith()函数..... 164 6.5.3 实例描述 ..................................... 164 6.5.4 实例应用 ..................................... 164 6.5.5 运行结果 ..................................... 165 6.5.6 实例分析 ..................................... 165 6.6 邮箱用户名长度验证 ............................. 166 视频教学:7 分钟 ....................... 166 6.6.1 基础知识——find()函数 ............ 166 6.6.2 实例描述 ..................................... 166 6.6.3 实例应用 ..................................... 167 6.6.4 运行结果 ..................................... 167 6.6.5 实例分析 ..................................... 168 6.7 文章内容过滤 ......................................... 168 视频教学:6 分钟 ....................... 168 6.7.1 基础知识——replace()函数 ....... 168 6.7.2 基础知识——translate()函数 ..... 168 6.7.3 实例描述 ..................................... 169 6.7.4 实例应用 ..................................... 169 6.7.5 运行结果 ..................................... 169 6.7.6 实例分析 ..................................... 170 6.8 转换时间字符串 strptime()函数 ............. 170 视频教学:6 分钟 ....................... 170 6.9 会员注册系统 ......................................... 171 视频教学:11 分钟 ..................... 172 6.9.1 基础知识——正则表达式 简介 ............................................. 172 6.9.2 基础知识——使用正则 表达式 ......................................... 173 6.9.3 实例描述 ..................................... 175 6.9.4 实例应用 ..................................... 175 6.9.5 运行结果 ..................................... 176 6.9.6 实例分析 ..................................... 177 目录 IX 6.10 常见问题解答 ....................................... 177 6.10.1 格式化字符串%号问题 ............ 177 6.10.2 无法对字符串进行拆分 ........... 178 6.11 习题 ....................................................... 179 第 7 章 面向对象编程 .................................... 181 7.1 面向对象编程 ......................................... 182 视频教学:14 分钟 ..................... 182 7.1.1 基础知识——多态 ..................... 182 7.1.2 基础知识——封装 ..................... 184 7.1.3 基础知识——继承 ..................... 185 7.2 创建自定义类 ......................................... 185 视频教学:9 分钟 ....................... 185 7.2.1 基础知识——类和对象 ............. 186 7.2.2 实例描述 ..................................... 187 7.2.3 实例应用 ..................................... 188 7.2.4 运行结果 ..................................... 188 7.2.5 实例分析 ..................................... 189 7.3 模拟水果成熟的过程 ............................. 189 视频教学:14 分钟 ..................... 189 7.3.1 基础知识——属性和方法 ......... 189 7.3.2 实例描述 ..................................... 200 7.3.3 实例应用 ..................................... 200 7.3.4 运行结果 ..................................... 201 7.3.5 实例分析 ..................................... 201 7.4 创建独特的服装连锁店 ......................... 202 视频教学:10 分钟 ..................... 202 7.4.1 基础知识——继承 ..................... 202 7.4.2 实例描述 ..................................... 207 7.4.3 实例应用 ..................................... 207 7.4.4 运行结果 ..................................... 208 7.4.5 实例分析 ..................................... 208 7.5 类的其他特性 ......................................... 209 视频教学:7 分钟 ....................... 209 7.5.1 基础知识——类的命名空间 ..... 209 7.5.2 基础知识——检查继承 ............. 210 7.6 新式类 ..................................................... 210 视频教学:9 分钟 ....................... 211 7.6.1 基础知识——_slots_类属性 ...... 211 7.6.2 基础知识——__getattribute__() 特殊方法 ..................................... 212 7.6.3 基础知识——描述符 ................. 213 7.7 常见问题解答 ......................................... 214 7.7.1 Python 中的__getattr__问题 ....... 214 7.7.2 Python 中的继承问题 ................. 216 7.7.3 Python 中的__getattribute__ 问题 ............................................. 217 7.8 习题 ......................................................... 218 第 8 章 基于文件的交互 ................................ 223 8.1 下载页面访问量统计 ............................. 224 视频教学:6 分钟 ....................... 224 8.1.1 基础知识——open()函数 ........... 224 8.1.2 实例描述 ..................................... 225 8.1.3 实例应用 ..................................... 225 8.1.4 运行结果 ..................................... 225 8.1.5 实例分析 ..................................... 226 8.2 创建本地记事本 ..................................... 226 视频教学:15 分钟 ..................... 226 8.2.1 基础知识——文件的读取 .......... 226 8.2.2 基础知识——文件的写入 .......... 228 8.2.3 实例描述 ..................................... 229 8.2.4 实例应用 ..................................... 229 8.2.5 运行结果 ..................................... 230 8.2.6 实例分析 ..................................... 230 8.3 格式化本地记事本 ................................. 230 视频教学:7 分钟 ....................... 230 8.3.1 基础知识——remove()函数 ....... 231 8.3.2 实例描述 ..................................... 232 8.3.3 实例应用 ..................................... 232 8.3.4 运行结果 ..................................... 233 8.3.5 实例分析 ..................................... 233 8.4 备份与恢复本地记事本 ......................... 233 视频教学:8 分钟 ....................... 233 8.4.1 基础知识——copyfile() 和 move()函数 ............................. 234 X Python Web 开发学习实录 8.4.2 实例描述 ..................................... 234 8.4.3 实例应用 ..................................... 235 8.4.4 运行结果 ..................................... 235 8.4.5 实例分析 ..................................... 236 8.5 日记内容过滤器 ..................................... 236 视频教学:4 分钟 ....................... 236 8.5.1 实例描述 ..................................... 236 8.5.2 实例应用 ..................................... 236 8.5.3 运行结果 ..................................... 237 8.5.4 实例分析 ..................................... 237 8.6 记事本的分类 ......................................... 238 视频教学:18 分钟 ..................... 238 8.6.1 基础知识——mkdir()函数 ......... 238 8.6.2 基础知识——makedirs()函数 .... 238 8.6.3 基础知识——rmdir()函数.......... 239 8.6.4 基础知识——rmtree()函数 ........ 239 8.6.5 实例描述 ..................................... 239 8.6.6 实例应用 ..................................... 240 8.6.7 运行结果 ..................................... 241 8.6.8 实例分析 ..................................... 242 8.7 记事本文件列表 ..................................... 242 视频教学:8 分钟 ....................... 243 8.7.1 基础知识——os.walk() 和 os.path.walk()函数 ................. 243 8.7.2 实例描述 ..................................... 244 8.7.3 实例应用 ..................................... 244 8.7.4 运行结果 ..................................... 244 8.7.5 实例分析 ..................................... 245 8.8 常见问题解答 ......................................... 245 8.8.1 使用 os 模块函数出错 ............... 245 8.8.2 使用 write()函数时出错 ............. 246 8.9 习题......................................................... 246 第 9 章 构造可容错的应用程序 .................. 249 9.1 Python 中的异常 .................................... 250 视频教学:7 分钟 ....................... 250 9.2 实现提示异常信息编号功能 ................. 251 视频教学:16 分钟 ..................... 251 9.2.1 基础知识——使用 try ...except 捕捉异常 ..................................... 251 9.2.2 基础知识——使用 try ...finally 捕捉异常 ..................................... 254 9.2.3 基础知识——使用 raise 抛出 异常 ............................................. 255 9.2.4 基础知识——自定义异常 .......... 256 9.2.5 基础知识——使用 assert 语句 ............................................. 256 9.2.6 实例描述 ..................................... 257 9.2.7 实例应用 ..................................... 257 9.2.8 运行结果 ..................................... 259 9.2.9 实例分析 ..................................... 260 9.3 使用 PythonWin 调试程序 ..................... 260 视频教学:5 分钟 ....................... 260 9.4 使用 Eclipse for Python 调试程序 .......... 262 视频教学:10 分钟 ..................... 262 9.4.1 基础知识——安装 PyDev .......... 262 9.4.2 基础知识——新建工程.............. 263 9.4.3 基础知识——配置调试.............. 264 9.4.4 基础知识——设置断点.............. 266 9.5 常见问题解答 ......................................... 268 9.5.1 常见的捕获异常的方式 有哪些 ......................................... 268 9.5.2 Python 的异常体系都有哪些 ..... 269 9.6 习题 ......................................................... 270 第 10 章 持久化的数据 .................................. 273 10.1 持久化 ................................................... 274 视频教学:7 分钟 ....................... 274 10.2 Python 的数据库支持 ........................... 275 视频教学:6 分钟 ....................... 275 10.3 制作一个可以永久保存的磁盘 ............ 277 视频教学:10 分钟 ..................... 277 10.3.1 基础知识——持久化模块 ........ 277 10.3.2 实例描述 ................................... 280 10.3.3 实例应用 ................................... 280 10.3.4 运行结果 ................................... 281 目录 XI 10.3.5 实例分析 ................................... 282 10.4 SQLite 数据库的使用 .......................... 282 视频教学:6 分钟 ....................... 282 10.4.1 基础知识——嵌入式 数据库 SQLite .......................... 283 10.4.2 实例描述 ................................... 286 10.4.3 实例应用 ................................... 286 10.4.4 运行结果 ................................... 287 10.4.5 实例分析 ................................... 288 10.5 常见问题解答 ....................................... 289 10.5.1 持久化模块 anydbm 问题 ........ 289 10.5.2 持久化模块 shelve 问题 ........... 290 10.5.3 Python 中数据库连接问题 ....... 291 10.6 习题 ....................................................... 293 第 11 章 让信息自由联通—— Python 网络功能 .......................... 299 11.1 网络模型介绍 ....................................... 300 视频教学:9 分钟 ....................... 300 11.1.1 基础知识——OSI 简介 ............ 300 11.1.2 基础知识——TCP/IP 简介 ...... 302 11.2 网络设计模块 ....................................... 303 视频教学:14 分钟 ..................... 303 11.2.1 基础知识——Socket 模块 ....... 303 11.2.2 基础知识——urllib 和 urllib2 模块 ........................................... 305 11.2.3 基础知识——其他模块 ........... 307 11.3 服务器与客户端通信 ........................... 308 视频教学:11 分钟 ..................... 308 11.3.1 基础知识——服务器端的 构建 ........................................... 308 11.3.2 基础知识——客户端的构建 ..... 311 11.3.3 实例描述 ................................... 313 11.3.4 实例应用 ................................... 313 11.3.5 运行结果 ................................... 314 11.3.6 实例分析 ................................... 314 11.4 异步通信方式 ....................................... 314 视频教学:7 分钟 ....................... 314 11.4.1 基础知识——使用 SocketServer 进行分叉处理 ........................... 314 11.4.2 基础知识——使用线程方式 ..... 315 11.4.3 基础知识——异步 IO 方式 ..... 316 11.4.4 基础知识——使用 asyncore 模块 ........................................... 319 11.4.5 实例描述 ................................... 322 11.4.6 实例应用 ................................... 322 11.4.7 运行结果 ................................... 323 11.4.8 实例分析 ................................... 324 11.5 实现一个简单 Web 服务器 .................. 324 视频教学:7 分钟 ....................... 324 11.5.1 基础知识——初始 Twisted 框架 ........................................... 324 11.5.2 基础知识——下载并安装 Twisted ...................................... 325 11.5.3 基础知识——编写 Twisted 服务器 ....................................... 326 11.5.4 实例描述 ................................... 327 11.5.5 实例应用 ................................... 327 11.5.6 运行结果 ................................... 328 11.5.7 实例分析 ................................... 329 11.6 常见问题解答 ....................................... 329 11.6.1 Python Socket 编程疑问 ........... 329 11.6.2 Pydev 调用 Twisted 模块的 reactor 错误 ............................... 330 11.7 习题 ....................................................... 330 第12 章 应知应会技能之HTML 处理 ........... 333 12.1 和我一起回顾 HTML ........................... 334 视频教学:8 分钟 ....................... 334 12.1.1 基础知识——HTML 概述 ....... 334 12.1.2 基础知识——HTML 语法 规范 ........................................... 334 12.1.3 基础知识——SGML、HTML 和 XHTML 的关系 ................... 335 12.2 URL 处理 .............................................. 336 视频教学:14 分钟 ..................... 336 XII Python Web 开发学习实录 12.2.1 基础知识——统一定位资源 URL ........................................... 336 12.2.2 基础知识——模块 urlparse ..... 337 12.2.3 基础知识——URL 的编码 与解码 ....................................... 340 12.3 CGI:帮助 Web 服务器处理客户端 数据....................................................... 342 视频教学:9 分钟 ....................... 342 12.3.1 基础知识——CGI 介绍 ........... 342 12.3.2 基础知识——配置和获取 CGI 环境 ........................................... 344 12.3.3 基础知识——解析用户的 输入 ........................................... 348 12.4 获取 HTML 文档资源 .......................... 350 视频教学:13 分钟 ..................... 350 12.4.1 基础知识——使用 urlopen 方法 获取 HTTP 资源 ....................... 350 12.4.2 基础知识——使用 httplib 模块 获取资源 ................................... 352 12.4.3 实例描述 ................................... 354 12.4.4 实例应用 ................................... 354 12.4.5 运行结果 ................................... 355 12.4.6 实例分析 ................................... 356 12.5 HTML 文档的解析............................... 356 视频教学:10 分钟 ..................... 356 12.5.1 基础知识——使用 HTMLParser 模块 ........................................... 356 12.5.2 基础知识——sgmllib 的 HTML 文档处理 ................................... 357 12.5.3 基础知识——使用 htmllib 处理 HTML 文档 .............................. 360 12.6 展示个人小资料 ................................... 361 视频教学:4 分钟 ....................... 361 12.6.1 基础知识——建立表单页 并生成结果页 ........................... 361 12.6.2 基础知识——生成表单和结果 页面 ........................................... 363 12.6.3 基础知识——完善表单页 和结果页 ................................... 366 12.6.4 基础知识——Mulitipart 表单 提交和文件上传 ....................... 369 12.6.5 实例描述 ................................... 370 12.6.6 实例应用 ................................... 371 12.6.7 运行结果 ................................... 372 12.6.8 实例分析 ................................... 373 12.7 常见问题解答 ....................................... 373 12.7.1 Python 中的 urlopen 问题 ......... 373 12.7.2 Python 中的 urllib2 问题 ........... 374 12.8 习题 ....................................................... 375 第 13 章 应知应会技能之 XML 处理......... 379 13.1 和我一起学习 XML ............................. 380 视频教学:6 分钟 ....................... 380 13.2 创建一个标准的 XML 文档 ................. 381 视频教学:17 分钟 ..................... 381 13.2.1 基础知识——XML 文档的 结构 ........................................... 381 13.2.2 实例描述 ................................... 388 13.2.3 实例应用 ................................... 388 13.2.4 运行结果 ................................... 389 13.2.5 实例分析 ................................... 390 13.3 读取 XML 文档节点下的数据 ............. 390 视频教学:3 分钟 ....................... 390 13.3.1 基础知识——SAX 介绍 ........... 390 13.3.2 基础知识——SAX 处理的 组成部分 ................................... 391 13.3.3 实例描述 ................................... 395 13.3.4 实例应用 ................................... 395 13.3.5 运行结果 ................................... 396 13.3.6 实例分析 ................................... 397 13.4 从 XML 文件中读取数据库配置 ......... 397 视频教学:13 分钟 ..................... 397 13.4.1 基础知识——DOM 介绍 ......... 397 13.4.2 基础知识——xml.dom 模块 中的接口操作 ........................... 399 目录 XIII 13.4.3 实例描述 ................................... 403 13.4.4 实例应用 ................................... 403 13.4.5 运行结果 ................................... 405 13.4.6 实例分析 ................................... 406 13.5 可扩展样式表语言 XSL ...................... 406 视频教学:13 分钟 ..................... 406 13.6 动态定义树状结构图 ........................... 408 视频教学:3 分钟 ....................... 408 13.6.1 实例描述 ................................... 408 13.6.2 实例应用 ................................... 408 13.6.3 运行结果 ................................... 409 13.6.4 实例分析 ................................... 410 13.7 常见问题解答 ....................................... 410 13.7.1 SAX 解析 XML 问题 ............... 410 13.7.2 DOM 中的 xml.dom.minidom 问题 ........................................... 411 13.7.3 动态生成 XML 文档问题 ........ 412 13.8 习题 ....................................................... 413 第 14 章 图形用户界面 .................................. 417 14.1 wxPython 的开发环境 .......................... 418 视频教学:8 分钟 ....................... 418 14.1.1 基础知识——丰富的平台 ....... 418 14.1.2 基础知识——下载 和安装 wxPython ...................... 419 14.1.3 基础知识——wxPython 的 开发工具 ................................... 420 14.2 wxPython 的程序结构 .......................... 423 视频教学:13 分钟 ..................... 423 14.2.1 基础知识——wxPython 应用 程序的组成 ............................... 423 14.2.2 基础知识——wxPython 窗口的 组成 ........................................... 425 14.2.3 实例描述 ................................... 427 14.2.4 实例应用 ................................... 427 14.2.5 运行结果 ................................... 428 14.2.6 实例分析 ................................... 428 14.3 wxPython 的常用组件 .......................... 429 视频教学:12 分钟 ..................... 429 14.3.1 基础知识——对话框 ............... 429 14.3.2 基础知识——工具栏 ............... 432 14.3.3 基础知识——状态栏 ............... 432 14.3.4 实例描述 ................................... 433 14.3.5 实例应用 ................................... 433 14.3.6 运行结果 ................................... 435 14.3.7 实例分析 ................................... 436 14.4 wxPython 的基本组件 .......................... 436 视频教学:7 分钟 ....................... 436 视频教学:18 分钟 ..................... 436 视频教学:10 分钟 ..................... 436 14.4.1 基础知识——文本框 ............... 436 14.4.2 基础知识——按钮控件............ 440 14.4.3 基础知识——单选按钮............ 442 14.4.4 基础知识——多选框 ............... 444 14.4.5 基础知识——列表控件............ 445 14.4.6 基础知识——Sizers 布局 组件 ........................................... 448 14.4.7 实例描述 ................................... 452 14.4.8 实例应用 ................................... 452 14.4.9 运行结果 ................................... 454 14.4.10 实例分析 ................................. 455 14.5 wxPython 库中的菜单控件 .................. 455 视频教学:11 分钟 ..................... 455 14.5.1 基础知识——菜单的创建 和使用 ....................................... 455 14.5.2 实例描述 ................................... 459 14.5.3 实例应用 ................................... 459 14.5.4 运行结果 ................................... 461 14.5.5 实例分析 ................................... 462 14.6 常见问题解答 ....................................... 462 14.6.1 应用程序启动时立即崩溃 ........ 462 14.6.2 顶级窗口刚创建便立即关闭 ..... 462 14.7 习题 ....................................................... 463 第 15 章 Python 的 Web 开发之 Django 框架应用 ........................................... 467 15.1 Django 框架简介................................... 468 视频教学:4 分钟 ....................... 468 XIV Python Web 开发学习实录 15.2 MVC 模式 ............................................. 469 视频教学:14 分钟 ..................... 469 15.2.1 基础知识——MVC 模式 介绍 ........................................... 469 15.2.2 基础知识——MVC 模式的优点 和缺点 ....................................... 470 15.2.3 基础知识——Django 框架 中的 MVC ................................. 471 15.3 Diango 开发环境的搭建 ...................... 472 视频教学:6 分钟 ....................... 472 15.3.1 基础知识——Django 框架的 安装 ........................................... 472 15.3.2 基础知识——数据库的配置 ... 473 15.4 使用 Django 框架制作通讯录 ............. 473 视频教学:19 分钟 ..................... 473 视频教学:11 分钟 ..................... 473 15.4.1 基础知识——Web 应用的 创建 ........................................... 474 15.4.2 基础知识——Django 的开发 服务器 ....................................... 476 15.4.3 基础知识——创建数据库 ....... 477 15.4.4 基础知识——生成 Django 应用 ........................................... 479 15.4.5 基础知识——创建数据模型 ..... 480 15.4.6 基础知识——URL 设计 .......... 481 15.4.7 基础知识——创建视图 ........... 483 15.4.8 基础知识——创建模板............ 485 15.4.9 实例描述 ................................... 487 15.4.10 实例应用 ................................. 487 15.4.11 运行结果 ................................. 491 15.4.12 实例分析 ................................. 491 15.5 使用 Django 框架的 Session 实现 购物车 ................................................... 492 视频教学:11 分钟 ..................... 492 15.5.1 基础知识——界面管理............ 492 15.5.2 基础知识——生成数据表 数据 ........................................... 494 15.5.3 基础知识——Session 的 应用 ........................................... 497 15.5.4 实例描述 ................................... 500 15.5.5 实例应用 ................................... 500 15.5.6 运行结果 ................................... 503 15.5.7 实例分析 ................................... 504 15.6 常见问题解答 ....................................... 504 15.6.1 出现 AttributeError: 'str' object has no attribute '_meta'错误 ....... 504 15.6.2 Django 出现 UnicodeEncodeError 错误 ........................................... 505 15.6.3 程序升级到 Django 1.0 后遇到 问题 ........................................... 505 15.7 习题 ....................................................... 506 附录 各章习题参考答案 ................................ 508 第 1 章 欢迎来到 Python 世界 内容摘要 Python 是一种功能强大而完善的通用语言,也是一种直译式计算机程序设计语言。该语言 借鉴了简单脚本和解释性语言的易用性,能够高效地完成各种复杂的高层次任务。本章将简 单介绍 Python 的知识和特性,重点介绍 Python 运行平台的搭建,以及使用解释器保存并执行 程序。 学习目标  了解 Python 的背景。  了解 Python 的特性和应用。  熟练掌握如何安装 Python。  了解 Python 解释器。  了解使用 Python 语言的开发工具。  掌握 Python 程序的保存及执行。 2 Python Web 开发学习实录 1.1 Python 简介 Python 语言的名字来源于一个喜剧,它的设计在工业和科研上得到了广泛的应用,被誉为 成为黑客应学习的四大编程语言之一。 视频教学:光盘/videos/01/python 简介.avi 长度:11 分钟 Python 是一种功能强大但简单易学的语言,本节我们将介绍什么是 Python 以及 Python 的 背景、特性、缺点和应用。 1. 什么是 Python Python 语言是一种功能非常强大的编程语言,它既具有简单脚本和解释型语言的易用性, 也具有传统编译语言的强大性,其高效率的高层数据结构和简单易学的面向对象编程特点,在 很多平台上都得到了认可,成为在这些平台上进行快速应用程序开发的主流脚本语言。 2. Python 的背景 Python 是在一个名为 Guido van Rossum 的人手中诞生的,设计之初的理念是为了让设计人 员不用为编程语言的结构而烦恼,使程序员能够专心于实现程序的功能。 1989 年圣诞节期间,Guido 对解释型语言 ABC 有着丰富的设计经验,但是 ABC 语言由 于没有开源,造成了它的不成功。Guido 决心开发一个新的脚本解释程序,作为 ABC 语言的 一种继承,实现 ABC 语言未能实现的东西,就这样 Python 语言诞生了。 3. Python 语言的特性 Python 语言有很多特性,它使得编写程序变得更为简单有趣,并成为非常精彩而强大的语 言,下面我们来看看它的特性。 1) 免费开源 像大家都知道的 Java、PHP 等语言都是开放源代码的,这些语言都得到了广大编程人员的 认可,而 Python 也是考虑到长远的发展,采取了向公众开放源代码。这样就能使任何一个爱 好者都能够自由发布这个软件的拷贝、阅读源代码并把它运用到新的开源软件中。正因如此, Python 一直被一些更加优秀的人不断改进着。 2) 简单易学 Python 具有很强的伪代码特性,我们在阅读源代码时,就像在读英语文章一样,学习起来 很容易,正是因为 Guido 的这种设计理念,使得程序员只专注于解决问题而不是如何搞明白语 言本身。 3) 高级语言 Python 是一种高级语言,不像使用汇编语言等那样要考虑诸如如何管理你的程序所使用的 内存之类的底层细节。 4) 解释执行 Python 是一种解释型的语言,使用这种语言编写的程序,不需要编译成计算机认可的二进 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 3 制代码,而是直接从源代码运行程序。 在计算机内部,像使用 C/C++等编译型语言编写的程序,必须通过编译器和不同的标记、 选项把程序的源代码编译成计算机可识别的二进制语言。当运行程序时,连接/转载器软件再 把程序从硬盘复制到内存中并且执行。而 Python 程序是通过 Python 解释器解释并执行的, Python 解释器把程序的源代码转换成称为字节码的中间形式,然后再把它翻译成计算机语言并 执行,使得程序员无须关心程序如何编译、程序中用到的库如何加载等麻烦问题。这样,使用 Python 将会更加简单,也更容易移植。 5) 可移植性 Python 具有强大的可移植性,而且移植起来也很简单,只需要把 Python 程序拷贝到另一 台计算机上就行了。由于 Python 是开放源代码的语言,它已经被移植到了许多平台上,甚至 Linux 系统中还内置了 Python。如果你小心地避免使用依赖于系统的特性,那么你编写的任何 Python 程序都可无须修改地在表 1-1 所示的现今主流系统平台上运行。 表 1-1 运行 Python 的主流平台 Linux Windows FreeBSD Macintosh Solaris OS/2 Amiga AROS AS/400 BeOS OS/390 z/OS Palm OS QNX VMS Psion Acom RISC OS VxWorks PlayStation Sharp Zaurus Windows CE PocketPC — — 6) 面向对象 像 Java 语言一样,Python 也支持面向对象编程,不同的是它还支持面向过程的编程。在 面向对象的编程中,程序是由数据和功能组合而成的对象构建起来的。而在面向过程的编程中, 程序是由过程或可重用的代码函数来构建起来的。就 Python 的面向对象编程而言,Python 还 有世界上最强大的类库,我们可以一种简单的方式来实现面向对象编程。 7) 嵌入性 Python 的嵌入性是指它可以作为一种成熟的脚本语言,并且以一种很方便的方式嵌入到其 他程序。比如 C/C++中。 8) 可扩展性 Python 的可扩展性使得程序员能够灵活地附加程序和定制工具,缩短开发周期。因为 Python 是基于 C 语言开发的,所以用 C/C++来编写 Python 的扩展。但是发展到现在 Python 也 有支持 Java 实现的 Jpython 扩展,从而使得 Python 可以在更多的语言中使用。 9) 丰富的类库 Python 是世界上具有标准库最大的编程语言。基于庞大的标准库,我们可以编写程序来处 理各种工作。其类库实现的主要功能如表 1-2 所示。 表 1-2 类库实现的功能 正则表达式 文档生成 单元测试 线 程 数据库 网页浏览器 CGI FTP 电子邮件 XML XML-RPC HTML WAV 文件 密码系统 GUI(图形用户界面) Tk 4 Python Web 开发学习实录 10) 内存管理器 在程序开发过程中,我们会遇到像使用 C/C++时要考虑的程序的内存管理问题。即使你使 用的是很小的程序,应用程序的修改和管理也需要程序员额外负责,这就需要开发者付出更多 的精力。 而在 Python 的程序开发过程中,Python 解释器承担了程序的内存管理工作,使得程序员 从内存事务处理中解脱出来,全身心致力于程序功能的实现,从而减少错误,健壮程序,缩短 开发周期。 4. Python 的应用 自 2006 年以来,Python 已成为继 C++、Java 之后的第三种编程语言,更多地被应用到著 名搜索引擎 Google 和 Nokia 智能手机所采用的 Symbian 操作系统上,可见 Python 的应用领域 非常广泛。表 1-3 介绍了 Python 语言可能的应用范围。 表 1-3 Python 的应用范围 应用范围 详细描述 系统编程 提供 API,能方便地进行系统维护和管理,是很多系统管理员理想的编程工具,是 Linux 系统下的标志性语言之一 图形处理 含有庞大的对诸如 PIL、Tkinter 等图形类库的支持,能够方便地进行图形处理 数字处理 NumPy 扩展提供大量与许多标准数学库对应的接口,可以方便地处理数学问题 文本处理 Python 提供了很多模块,如 re 模块能够处理正则表达式,又如 SGML、XML 分析模块可 进行文本的编程开发 数据库编程 通过 Python DB-API(数据库应用程序编程接口)规范模块,可以与 Microsoft SQL Server、 Oracle、Sybase、DB2、Mysql、SQLite 等数据库通信。Python 自带的 Gadfly 模块可提供 完整的 SQL 环境 网络编程 提供丰富的模块支持 Sockets 编程,能够方便、快速地开发分布式应用程序 Web 编程 支持 HTML、XML 技术 多媒体应用 Python 的 PyGame 模块可用于编写游戏软件,yOpenGL 模块则封装了 OpenGL 应用程序编 程接口,能进行二维和三维图像处理 1.2 安装 Python(Windows 安装) Python 是一种功能非常强大的语言,通过学习,我们很快就能完成与平台无关的各种程序。 在了解了 Python 的特点之后,我们就可以进行 Python 语言开发的学习了。在学习之前,首先 要了解 Python 的下载、安装以及怎样启动。 视频教学:光盘/videos/01/ Python 的安装.avi 长度:8 分钟 用 Python 编写的程序只有在安装了 Python 和配置好环境的前提下才能运行,在这里我们 将讲解如何下载、安装和启动 Python。值得一提的是,大约 70%的下载都来自 Windows 用户, 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 5 不要以为这样就可以下结论说 Python 在 Windows 平台中使用得最多,因为几乎所有的 Linux 用户在安装系统时都默认已经安装了 Python。 我们可以从 Python 的官方网站下载该软件。打开浏览器,在地址栏输入 http://www.python.org/ 打开网站主页,然后下载安装文件。 1.Python 的安装 (1) 在目录中找到刚刚下载的 Python 安装文件,双击这个文件,会弹出 Python 安装程序 的安装向导对话框,如图 1-1 所示。 (2) 在这里我们可以看到两个单选按钮,第一个 Install for all users 是为所有用户安装,第二 个 Install just for me 是为个人用户安装。单击第一个按钮,然后单击 Next 按钮,进入 Python 的安装路径设置界面,如图 1-2 所示。 图 1-1 Python 安装程序向导对话框 图 1-2 Python 安装路径设置界面 (3) 选择安装路径。可以把路径更改为硬盘的任意路径。在此我们把 Python 安装到 E:\Python25 下,选择好安装路径后,单击 Next 按钮,进入 Python 安装组件选择界面。在这里 我们选择安装所有的组件,一般采用默认就可以了,如图 1-3 所示。 (4) 单击 Next 按钮,进入 Python 工具包的安装界面,如图 1-4 所示。 图 1-3 Python 组件选择界面 图 1-4 Python 工具包安装界面 6 Python Web 开发学习实录 (5) 等程序安装完成后,会提示如图 1-5 所示的程序安装成功界面,最后单击 Finish 按钮 完成安装。 图 1-5 Python 安装完成 2.Python 的环境配置和测试 我们已经安装好了 Python,但是想要正常运行它还差一步,那就是 Python 的环境配置。 在电脑的桌面上右击“我的电脑”图标,在弹出的快捷菜单中选择“属性”命令,会出现“系 统属性”对话框,然后切换到“高级”选项卡,如图 1-6 所示,会出现“环境变量”按钮。 单击“环境变量”按钮,出现系统所有的环境变量列表,如图 1-7 所示。 图 1-6 “系统属性”对话框 图 1-7 系统环境变量 从“系统变量”列表框中找到名为 Path 的变量,选中并单击“编辑”按钮,出现“编辑 系统变量”对话框,如图 1-8 所示。在“变量值”文本框中添加已经安装的 Python 路径 E:\Python25,然后以分号隔开,单击“确定”按钮。这样就完成了 Python 的环境配置。 当正确安装了 Python,并配置了 Python 环境变量后,我们就可以正常运行 Python 了。在 这里我们可以通过两种方式来启动 Python:一种是使用命令行启动,另一种是使用 Python 的 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 7 集成开发环境 IDLE。 1.Python 的命令行启动 执行“开始”|“运行”命令,打开“运行”对话框。在该对话框中输入 python 命令, 如图 1-9 所示。 图 1-8 编辑环境变量 图 1-9 “运行”对话框 直接回车或单击“确定”按钮,就会在 DOS 环境中正常启动 Python 了,如图 1-10 所示。 图 1-10 在 DOS 下启动 Python 2.使用 Python 集成开发环境启动 除了使用命令行启动 Python 外,我们还可以使用其他方式来启动 Python,例如使用 IDLE 集成开发工具。执行“开始”|“程序”|Python 2.5|IDLE(Python GUI)命令,启动 Python 集成开发环境,如图 1-11 所示。 图 1-11 IDLE 交互式 Python Shell 8 Python Web 开发学习实录 1.3 使用带提示符的解释器 Python 是一种解释型的语言,并不需要编译而是直接在机器上执行。在编写 Python 程序 时,我们需要了解 Python 解释器的有关知识。本节将讲解如何调用解释器、解释器的错误处 理、源程序编码和交互式环境的启动文件等内容。 视频教学:光盘/videos/01/Python 解释器.avi 长度:10 分钟 1.3.1 基础知识——Python 解释器 除了 Python 的语言特色外,Python 解释器就是整个语言能够得以运行的灵魂。有了 Python 解释器,用 Python 编写的程序才能处理相应的事务。 1.调用解释器 在使用 Python 编程的时候,要用到 Python 解释器来解释并执行程序。在 Windows 平台下 启动解释器有两种方式:一是在命令行中启动,二是使用 IDLE。下面分别看看这两种启动方式。 1) 在命令行启动解释器 如果像 1.2 节所讲的,我们应经配置好了 Python 的运行环境,这样我们就可以在命令行启 动解释器了。 首先打开 DOS 命令提示符窗口,如图 1-12 所示。 图 1-12 DOS 命令提示符窗口 在该窗口中输入 python 命令并回车,就能顺利启动 Python 解释器,如图 1-13 所示。该解 释器会提示有关解释器的版本、时间和系统平台等信息。 图 1-13 用 DOS 命令启动解释器 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 9 通过命令行启动解释器后,我们可以通过执行有关命令让解释器执行一些动作,如表 1-4 所示。 表 1-4 解释器命令 命 令 作 用 -d 提供调试输出 -O 生成优化的字节码(生成.pyo 文件) -S 不导入 site 模块,以在启动时自动查找 Python 路径 -v 冗余输出(导入语句详细追踪) -m mod 将一个模块以脚本形式运行 -Q opt 除法选项 -c cmd 运行以命令行字符串形式提交的 Python 脚本 file 从给定的文件运行 Python 脚本 2) 使用 IDLE 启动解释器 IDLE 是用于 Python 程序开发的集成开发工具,通过它同样可以启动 Python 解释器。如前 所述,可以执行“开始”|“程序”| Python 2.5 | IDLE(Python GUI)命令来启动 Python 集成开发 环境,如图 1-14 所示。 图 1-14 IDLE 在图 1-14 中,执行 File | new Window 命令,或者使用快捷键 Ctrl+N,打开一个新的编辑 窗口。在里面,我们输入以下代码,这就是在编写代码了,如图 1-15 所示。 图 1-15 在编辑器中编辑程序 10 Python Web 开发学习实录 print "我是王亚斌" x = int(raw_input("Please enter an integer: ")) if x < 0: print 'Negative changed to zero' 把编辑好的程序保存,然后使用快捷键 Ctrl+F5,将程序交给 Python 解释器解释执行,其 执行结果如图 1-16 所示。 图 1-16 程序执行结果 2.交互模式 在 Python 解释器中,我们编写的程序可以交互式模式解释执行。在这种模式下它主要根 据主提示符来执行,Python 中的主提示符标记通常是 3 个大于号(>>>),除此之外,还有从属 提示符,以 3 个点来标记(…)。启动解释器后,我们将看到解释器打印的欢迎信息、版本号和 授权提示信息,如下所示: Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. 当 Python 解释器解释程序时,会在下一行立即给出程序的结果,使结果和程序进行交互 式执行。 3.解释器的错误处理 在编写程序时,难免遇到这样或那样的错误,在 Python 中也会发生。当有错误发生时, 解释器会打印错误信息并启用栈跟踪器。在交互模式下,它返回主提示符,如果从文件输入执 行,它在打印栈跟踪器后会以非零状态退出。有一些致命的错误会导致系统在非零状态下退出, 这些错误通常是由内部矛盾和内存溢出所造成的。 4.源程序编码 在 Python 的源程序中,我们除了使用 ASCII 编码外,还可以使用其他编码方式。具体的 做法就是在#!行后面用一个特殊的注释行来定义字符集,例如以下代码: # -*- coding: iso-8859-1 -*- 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 11 根据这个声明,Python 就会将文件中的字符尽可能地从指定的编码转换为 Unicode。如果 文本编辑器支持 UTF-8 格式,也可以转换为此格式。 使用 UTF-8 编码(无论是用标记还是编码声明),我们可以在字符串和注释中使用世界上的 大部分语言。标识符中不能使用非 ASCII 字符集。为了正确显示所有的字符,一定要在编辑器 中将文件保存为 UTF-8 格式,而且使用支持文件中所有字符的字。 5.交互式环境的启动文件 编写程序时,我们会发现大量的代码都可以重用。但在使用 Python 解释器的时候,我们 可能在每次启动解释器时执行一些重复的命令,因此我们可以在一个文件中写入这些命令,然 后在环境变量中指定名为 PYTHONSTARTUP 的环境变量来指定这个文件,该文件就是交互式 环境的启动文件。 在使用这个文件的时候,具体来说就是在交互会话期是只读的,但是当 Python 解释器从 脚本解释文件或以终端作为外部命令源时就不会如此。因为它与解释器执行的命令处在同一个 命名空间,所以由它定义或引用的一切附加文件都可以在解释器中不受限制地使用。 1.3.2 实例描述 我们知道,Python 解释器在启动时都会执行一些重复的命令,这些命令可以统一写入交互 式环境的启动文件中。下面以一个小实例来演示如何执行这个文件。 1.3.3 实例应用 【例 1-1】在当前目录中执行附加的启动文件。 (1) 新建一个名为 too.py 的全局启动文件,放在 E:\Python25 目录下,然后在文件中加入以 下代码: if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py') (2) 打开系统的环境变量,在系统环境变量中重新编辑一个名为 PYTHONSTARTUP 的环 境变量,变量值为 E:\Python25\too.py,如图 1-17 所示。 图 1-17 编辑全局启动文件环境变量 (3) 设置好后就能使用了。使用时,我们需要在所使用的文件中加入一些代码。例如新建 一个 1.3.py 文件,并在其中加入如下代码: import os filename = os.environ.get('PYTHONSTARTUP') 12 Python Web 开发学习实录 if filename and os.path.isfile(filename): execfile(filename) print "这是引入的交互式启动文件" (4) 保存文件,这样就能在 Python 解释器执行时启动这个文件。 1.3.4 运行结果 选中 1.3.py 文件,然后使用快捷键 Ctrl+F5 使 Python 解释器解释这个文件,结果如图 1-18 所示。 图 1-18 执行交互式启动文件 1.3.5 实例分析 源码解析 在上述实例中,我们定义了一个名为 PYTHONSTARTUP 的环境变量,之后才能在文件中 正常启动交互式启动文件。在文件中使用的时候,我们必须使用 import 关键字引入这个文件。 1.4 Python 集成开发环境 在 Python 程序的开发中,我们能够看到 Python 的开发工具很多,例如很多强大的智能开 发环境(IDE),像 PythonWin、Eclipse 和 Komodo 等。这些开发环境不仅支持图形化操作,还 具有编辑、调试和纠错功能。除了集成开发环境之外,我们经常使用的文本编辑器也可用于 Python 程序的开发,例如 EditPlus 等。 视频教学:光盘/videos/01/ Python 的开发工具.avi 长度:14 分钟 虽然 Python 的开发工具很多,但是比较常用的只有几个,例如 PythonWin、Eclipse 和 EditPlus。表 1-5 列出了除 Python 官方版本的 IDLE 外的其他集成开发环境。 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 13 表 1-5 Python 的集成开发环境 集成开发环境 详细描述 IDLE 标准 Python 环境 PythonWin 面向 Windows 的环境 ActivePython 功能完善,包含 PythonWin Komodo 商业化 IDE WingWear 商业化 IDE BlackAdder 商业化 IDE 以及 GUI 生成器 Boa constructor 免费的 IDE 和 GUI 生成器 Anjuta Linux 和 UNIX 下的万能生成器 Arachno Python 商业化 IDE Eclipse 流行、灵活并且开源的 IDE WxGlade 免费的 GUI 生成器 KDevelop 针对 KDE 多语言的 IDE 这里我们讲解一下 PythonWin 的使用方法、Eclipse IDE 集成开发环境以及 EditPlus 编辑器 环境的配置。 1.PythonWin 的使用方法 PythonWin 的发行版本包括 Windows 应用程序接口和 COM 组件模型,它是世界上最早出 现的 Python 开发工具之一。当我们从官方网站下载并安装完成后,就可以通过执行“开始”| “程序”|ActiveState ActivePython 2.5|PythonWin Editor 命令来运行 PythonWin,打开 PythonWin 的图形化命令窗口,如图 1-19 所示。 图 1-19 PythonWin 图形化命令窗口 在 PythonWin 图形化命令窗口中,通过执行 File | Open 命令来打开文件,并在窗口中运行 14 Python Web 开发学习实录 文件。要新建一个文件,可以通过执行 File | New 命令,然后在弹出的对话框中选择 Python Script 并确定,这样就可以新建一个 Python 文件并编写 Python 代码了,如图 1-20 所示。 图 1-20 PythonWin 编辑器 当使用 PythonWin 做 Python 程序开发时,不仅可以编辑程序,还可以对程序进行断点的 设置并进行单步调试,这样就大大降低了程序的出错率。 2.Eclipse IDE 集成开发环境 Eclipse 是一个开源项目,它是 Java 开发的集成开发环境。不仅用于 Java,Eclipse 的扩展 性也很强,而且能够开发大量的插件来支持其他语言,例如 C、C++、PHP 和 Python 等。 Eclipse 的功能非常强大,它不仅实现了 Python 代码的语法加亮、代码提示和代码补全等 智能化功能,而且还提供了比 PythonWin 更强大的调试能力。Eclipse 还支持 Jython、Pyunit 以 及团队开发等其他功能。 如果要在 Eclipse 平台上开发 Python,需要下载 PyDev 插件,这里我们使用 Eclipse 对 Python 的独立运行版本 Eclipse for Python,这个工具可以在网上下载。 Eclipse 开发工具的界面主要被分为视图和编辑器两部分,视图部分包括源代码大纲视图和 文件系统导航视图。编辑器部分主要包括 Java 源代码编辑器和 Python 源代码编辑器。其视图 界面如图 1-21 所示。 3.EditPlus 编辑器环境的配置 在开发中,除了使用开发工具外,还可以使用编辑器进行开发。最常使用的编辑器就是 EditPlus。使用 EditPlus 进行程序开发不仅使编写的程序具备语法加亮、代码自动缩进等功能, 还可以对程序进行调试。下面介绍一下 EditPlus 编辑器环境的配置。 1) 向 EditPlus 中添加 Python 当我们启动 EditPlus 后,从菜单栏选择“工具”|“配置用户工具”命令,打开“参数选择” 对话框。在“参数选择”对话框中单击“添加工具”按钮,再从弹出的菜单中选择“应用程序” 命令。 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 15 图 1-21 Eclipse IDE 集成开发环境 新建一个名称为 Python 的群组,分别在“菜单文字”文本框中输入 Python,在“命令” 文本框中输入 Python 的安装路径,在“参数”文本框中输入$(FileName),在“初始目录”文 本框中输入$(FileDir),如图 1-22 所示。一定要在“动作”下拉列表框中选择“捕获输出”选 项,只有这样 Python 程序运行后的输出结果才会显示在 EditPlus 的输出栏,否则运行 Python 程序后将弹出命令行窗口,并把结果输出到命令行中。单击“确定”按钮,新建一个 Python 文件,此时“工具”菜单下将会出现 Python 选项。单击 Python 选项或按快捷键 Ctrl+1,就可 以运行 Python 程序了。 2) 增加高亮显示 为了使我们在编写代码时不至于对单色调的代码产生误解,可以对 EditPlus 编辑器增加高 亮显示。但是在对编写的 Python 文件增加高亮显示之前,我们要用到两个文件:python.acp 和 python.stx(可以从 http://www.editplus.com/files/pythonfiles.zip 下载)。ACP 文件表示自动完成的 特征文件,STX 文件表示语法加亮的特征文件。 当下载完成后,把下载的文件解压到 EditPlus 的安装目录下,然后在“参数选择”对话框 中的“类别”选择框中选择“文件”|“设置 & 语法”选项。然后单击“添加”按钮,弹出“设 置 & 语法”对话框,在该对话框中的文本框中输入 Python,单击“确定”按钮,Python 将出 现在“参数选择”对话框中的“文件类型”选择框中。在“文件扩展名”文本框中输入 py,在 “语法文件”文本框中输入 python.stx 的路径,在“自动完成”文本框中输入 python.acp 的路 径,如图 1-23 所示,然后单击“确定”按钮,这样就完成了增加高亮显示的设置。 再次打开编辑器,就可以看到图 1-24 所示的效果。 16 Python Web 开发学习实录 图 1-22 添加 Python 工具 图 1-23 增加高亮显示 图 1-24 Python 代码的高亮显示 1.5 保存并执行程序 在进行 Python 代码编程时,所用到的交互式解释器在退出时所有的编码都会消失。我们 不仅要学会如何新建并编辑程序,还要学会保存文件。下面将讲解如何正确地保存和执行程序。 视频教学:光盘/videos/01/程序的保存和运行.avi 长度:6 分钟 1.5.1 基础知识——程序的保存和运行 在编写程序时,首先选择编辑器,这里我们使用 IDLE。打开 IDLE 后,可以通过执行 File| New Window 命令新建一个编辑窗口。在这个窗口里,输入以下代码: 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 17 name = raw_input("你叫什么名字:") print "嗨,我的名字叫"+name 执行 File|Save 命令保存我们刚刚编写的程序。保存文件的路径一定要清楚,以及保存的 文件必须以.py 结尾。 程序保存完毕,我们就可以运行它了。使用快捷键 Ctrl+F5,运行程序,将看到程序的运 行结果,如图 1-25 所示。 图 1-25 程序的运行结果 1.5.2 实例描述 我们虽然已经学习了 Python 的不少知识,但是还没接触到具体的 Python 程序如何编写。 下面将编写 Python 的第一个程序,这个程序实现的功能是:对你输入的数字进行判断,到底 是大于零还是小于零。 1.5.3 实例应用 【例 1-2】Python 的第一个程序。 (1) 新建一个名为 first.py 的文件,然后在文件中输入以下代码: x = int(raw_input("Please enter an integer: ")) if x < 0: print 'this number < 0' if x > 0: print "this number >0" (2) 保存文件。 1.5.4 运行结果 使用快捷键 Ctrl+F5 通过 Python Shell 来执行文件,我们可以看到图 1-26 所示的结果。 18 Python Web 开发学习实录 图 1-26 执行结果 1.5.5 实例分析 源码解析 在上述实例中我们通过使用 raw_input()函数来获取用户输入的信息,然后传给变量 x,通 过对变量 x 的值进行判断,并给出执行响应的结果。 1.6 常见问题解答 1.6.1 关于 Python 版本的问题 关于 Python 版本的问题? 网络课堂:http://bbs.itzcn.com/thread-13631-1-1.html 我最近准备学 Python,发现 Python 2 和 Python 3 不兼容,那么先学 Python 2 好呢?还是 直接学 Python3 好? 【解决办法】目前大多数应用都是 Python 2.5/2.6 居多。很多插件和库都还停留在 2.5/2.6 阶段,如果你去玩 3.0,会发现很多扩展都没有。所以说你现在玩 3.0 不实用。 Windows 上建议学 2.6,Linux 上就玩 2.5。Python 2 和 Python 3 并不是 100%不兼容,Python 3 只不过是对 Python 2 进行了一次大清洗,源码上精炼了许多,语法上做了一些修缮。会 Python 2 的人以后不会对 Python 3 感冒的。 1.6.2 Python 的 print 问题 Python 的 print 问题? 网络课堂:http://bbs.itzcn.com/thread-13632-1-1.html 窗内网永久网址 www.itzcn.com 第 1 章 欢迎来到 Python 世界 19 书上明明写的是 print 'hello world',可是编译通不过,必须写成 print('hello world')才行,是 怎么回事?是不是版本的问题?另外请说明一下 print 的常见用法。还有 raw_input 怎么用,写 成 a = raw_input("please input a")怎么会报错,说是 raw_input 未声明,请解答。 【解决办法】第一个问题是版本的问题,你用的应该是 Python 3 吧,而 Python 3 刚刚出 来,书上写的大多是 Python 2,所以会报错。你可以用 Python 2 或者以下版本试试。print 的常 见用法就看书上写的好了。 第二个问题 raw_input 是将你的输入赋值给变量,例如: a = raw_input("please input a") 在交互窗口运行时可以输出 please input a。在后边输入字符并回车,这样输入的字符就赋 值给 a 了。 1.6.3 关于 Python 编程的问题 关于 Python 编程的问题? 网络课堂:http://bbs.itzcn.com/thread-13632-1-1.html 我读了一本 Python 的书,看完了,可这本书没有讨论语言的细节。编程理论也少得可怜, 我想知道如果把这个语言学到中等水平应该读哪些书,有没有视频教程,希望指导一下学习的 规划。 【解决办法】语言的细节基本上你看 Python 自带的 python documentation 就足够了,不过 好像比较多,先看其中的 python tutorial 就可以了,然后再看 dive into python。如果要做一个好 的程序员,算法是少不了的。但是这和 Python 无关。你可以把其他语言课中遇到的习题用 Python 实现,对初学者来说这是很好的锻炼方式。 1.7 习 题 一、填空题 (1) Python 是在一个名为__________人手中诞生的。 (2) Python 成为继 C++、Java 之后的第__________种编程语言。 (3) Python 是一种__________的语言,并不需要编译,而是直接在机器上执行。 二、选择题 (1) 以下__________不是 Python 语言的特点。 A.免费开源 B.运行于服务器端 C.可移植性 D.解释性 (2) 在 Python 的应用领域,___________含有庞大的诸如 PIL、Tkinter 等图形类库的支持, 能够方便地进行图形处理。 A.系统编程 B.数字处理 C.文本处理 D.图形处理 20 Python Web 开发学习实录 (3) __________的发行版本包括 Windows 应用程序接口和 COM 组件模型,它是世界上最 早出现的 Python 开发工具之一。 A.PythonWin B.Eclipse C.IDLE D.EditPlus 三、上机练习 上机练习:自己动手安装和配置 Python,并安装一种开发工具,如 PythonWin。 练习要求:能够手动安装和配置 Python,并通过安装 PythonWin 达到能够编写代码的程度。 第 2 章 练就扎实的基本功 内容摘要 PHP 靠一个“简单”占领了市场,PHP 的哲学是快速而“不择手段”。Python 同样简单, 但 Python 的哲学是快速而漂亮,它的漂亮体现在代码上。Python 是一种面向对象、直译式计 算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成 熟且稳定。这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所 有的操作系统中运行。 每一种语言都会有它独特的一些基本常识,比如变量、字符串的声明和使用,该语言的数 据类型都有哪些?当用户需要向系统中输入一段字符时,该语言如何将用户所输入的字符输 出?如何为代码添加注释。本章将介绍 Python 的一些基本常识。 学习目标  掌握变量的声明和使用。  掌握 Python 命令。  掌握 Python 的数据类型和表达式。  掌握向代码中添加注释。  了解 Python 的运算符。 22 Python Web 开发学习实录 2.1 Python 的编码规则 每一种语言都有自己的编码规则,编程时不可违背这些准则。一旦违背,程序就无法执行, 甚至出现异常。本节将讲解 Python 的一些编码规则。 视频教学:光盘/videos/02/ Python 的编码规则.avi 长度:16 分钟 2.1.1 基础知识——代码缩进与冒号 代码缩进是指通过在一行代码的前面输入若干空格或者制表符来表示行与行之间的层次 关系。每一种编程语言一般都需要代码缩进来规范程序代码的层次结构,使代码清晰,易于阅 读和理解。对于多种语言,例如 C、C++、Java、C#等,代码缩进作为一种良好的编码习惯而 延续下来。对 Python 语言来讲,代码缩进是一种语法,Python 语言中没有采用花括号或 begin...end 来分隔代码块,而是使用冒号和代码缩进来区分代码之间的层次。 使用 Eclipse IDE 开发工具或者 EditPlus 等编辑器书写代码时,编辑器会自动缩进代码,并 在需要添加冒号的地方自动补充冒号,提高了编码效率,为程序员减轻了很多编写代码的负担。 下面使用 EditPlus 编辑器来编辑一段代码,并采用代码缩进的语法来显示条件语句。 time=12 if(time==12): print '12' #代码缩进 else: print '18' #代码缩进 在上面的代码中,首先创建了变量 time,并赋值为 12。在这条语句中,赋值运算符=两侧 各添加了一个空格,这是一种良好的编程习惯,提高了程序的可读性。接着使用 if 条件语句判 断 time 的值是否为 12,在 if 条件语句之后输入一个冒号,而冒号后面的代码块则需要缩进编 写,因为当 if 条件成立时,程序才能执行 if 块中的代码,因此第 3 行代码位于第 2 行代码的下 一个层次。当启用 EditPlus 编辑器的自动缩进功能时,代码块 print '12'会由 EditPlus 自动缩进。 下面的 else 语句是一段新的代码块,与 if 条件语句是同层结构,因此直接从最左端书写代码即 可。运行上段代码,输出结果如下: 12 Python 对代码缩进要求很严格,如果程序中没有采用代码缩进的编码风格,程序将会抛出 一个 IndentationError 的异常信息。 如果缩进的代码前只有一个空格或者几个制表符也是符合语法要求的,但是不推 荐使用这种写法。最佳的方法就是编码前统一代码的书写规则,使所有代码前的 空格数保持一致,最好使用 4 个空格缩进。 每行代码缩进的情况不一样,代码执行的结果也会有所不同,例如下面的代码: 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 23 time=12 if(time==12): print '12' #代码缩进 else: print '18' #代码缩进 time=time+6 #代码缩进 print str(time) #代码缩进 执行该段代码,输出结果如下: 12 修改上面代码的缩进情况,代码如下: time=12 if(time==12): print '12' #代码缩进 else: print '18' #代码缩进 time=time+6 #代码缩进 print str(time) #代码缩进 执行该段代码,输出结果如下: 12 18 从上面的两段代码可以看出,不同的代码缩进执行的结果不同。因此,当程序出现问题时, 首先需要检查代码的书写是否正确,如果正确再检测代码缩进是否合理。 2.1.2 基础知识——使用空行分隔代码 函数与函数之间或者类与类之间用空行分隔,表示一段新的代码的开始。类和函数入口之 间也用一行空行分隔,以突出函数入口的开始。 下面创建一个类 MyClass,并在类 MyClass 中定义 myFirstFun()和 mySecondFun()方法,代 码如下: class MyClass: def MyFirstFun (self): print 'MyFirstFun()' def MySecondFun (self): print 'MySecondFun()' if __name__ == "__main__": myclass = MyClass() myclass.MyFirstFun() myclass.MySecondFun() 在上面的代码中,类 MyClass 中的第一个方法 MyFirstFun()与第二个方法 MySecondFun() 24 Python Web 开发学习实录 之间插入了一个空行,在第二个方法结束与主程序的入口之间又插入了一个空行,便于阅读代 码,区分功能结构。 用两行空行分隔顶层函数和类的定义,类内方法的定义用两个空行分隔,额外的空行可用 于分隔相关函数组成的群,在一组相关的单句中间可以省略空行。当空行用于分隔类中方法的 定义时,在 class 行和第一个方法定义之间也要有一个空行。在函数中使用空行,表示一个逻 辑段落。 Python 中的空行与代码缩进是完全不同的概念,空行并不是 Python 语法的一部分, 只是程序代码的一部分。书写时不插入空行,Python 解释器运行是正常的,但是 空行的作用在于分隔两段不同功能或者不同含义的代码,以便于程序的后期维护 或重构。 2.1.3 基础知识——命名规则 每一种语言也会有一套属于自己的命名规则,Python 语言也不例外。下面介绍几种常见的 命名规则。 1.包、模块的命名规则 Python 语言中的包名与 Java 语言中包的命名规则是相同的,全部以小写字母的形式来命 名。模块名应该是不含下划线、简短、小写字母这些规则来命名的,因为模块名被映射到文件 名,有些文件系统对大小写不敏感并且会截取比较长的名字。例如: Filename:pythonModule.py 该语句声明了一个模块的名称,模块名全部用小写字母组成。 2.类、对象的命名规则 Python 中的类名采用 CapWords 约定,即每个单词的首字母要大写,其他字母小写,例如 MyStudent。对象名用小写字母来表示。类的私有属性、私有方法以两个下划线作为前缀,对 象通过点操作符来访问类中的属性和方法。例如下面的代码: class MyClass: #类名中的每个单词的首字母大写,其他小写 __username='' #私有属性前必须使用两个下划线为前缀 def __init__ (self,username): self.__username=username #self 相当于 Java 语言中的 this 关键字,表示本类 def getUserName (self): #方法名的首字母小写,其后每个单词的首字母要大写 return self.__username if __name__ == "__main__": myclass = MyClass('admin') #对象名用小写字母 print myclass.getUserName() 在该段代码中,首先创建了 MyClass 类,类名的每个单词的首字母大写,其他小写。在类 中定义了一个私有属性,以两个下划线为前缀命名,即__username。在类中定义了一个私有方 法,同样采用两个下划线命名,即__init__。在方法中,使用了 self 为前缀来说明__username 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 25 属性属于 MyClass 类。在 MyClass 类中还定义了一个公有的方法,方法名的首字母小写,其后 的每个单词首字母大写,其他字母小写。在该方法中,将类中的__username 属性使用 return 返 回。在程序的入口函数中,创建了一个名称为 myclass 的对象,对象名小写。 3.函数的命名规则 函数名的命名规则如下。  函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。  函数名是区分大小写的。  函数名不能是保留字。 下面通过一段代码来详细了解函数名的命名规则。 import random def equalseNum (num): #函数名首字母小写,后面每个单词的首字母大写 if(num == 6): print 1 else: print 0 num=random.randrange(1,9) print 'num = '+str(num) print equalseNum(num) 在该段代码中,首先导入 random 模块,接着定义了一个函数 equalseNum()。该函数的名 称首字母小写,后面每个单词的首字母大写。参数 num 接收的是下面自动生成的数字。在该 函数中,使用 if 条件语句来判断参数 num 是否为 6,如果为 6,输出 1,否则输出 0;然后定 义了一个变量来接收生成随机数的模块 random 中 randrange()函数所生成的 1~9 的数字,函 数 randrange()以模块 random 作为前缀命名;最后将生成的数字作为参数传入到函数 equalseNum()中。 2.1.4 基础知识——为代码添加注释 注释是用于说明代码实现的功能,采用的算法,代码的编写者以及代码创建和修改的时间 等信息。注释是代码的一部分,起到对代码补充说明的作用,易于程序的阅读分析。C、C++、 Java 等语言均采用//或/*…*/作为注释的标记,Python 的注释方式有所不同。 1.单行注释 Python 中的单行注释使用#号加若干空格开始,后面是注释的内容,以回车作为注释的结 束。例如: #声明并初始化变量 num num=1 2.行内注释 Python 中的行内注释是最常用的,行内注释应该至少用两个空格和语句分开,它们以#号 和单个空格开始。例如: 26 Python Web 开发学习实录 num=1 #声明并初始化变量 num 3.注释块 注释块通常应用于跟随一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中 也使用#号和一个空格开始。注释块内的段落以仅含单个#的行分隔。例如: # 声明并初始化变量 num # 改变变量 num 的值,使值扩大 10 倍 # # 输出变量的值 num = 12 num *= 10 print num Python 一般会忽略#行的内容,跳过#行执行后面的内容。特殊含义的注释例外。Python 还有一些特殊的注释,用以完成一些特别的功能,例如中文注释、程序的跨平台等。 1) 中文注释 如果需要在代码中使用中文注释,必须在 Python 文件的最前面加上如下注释说明: #_*_ coding:UTF-8 _*_ 2) 跨平台注释 如果需要使 Python 程序运行在 Windows 以外的平台上,则需要在 Python 文件的最前面加 上如下注释说明: !# /usr/bin/python 2.1.5 基础知识——语句的分隔 在 C、Java 等语言的语法中规定,必须以分号作为语句结束的标识。Python 也支持分号, 同样用于一条语句的结束。但在 Python 中分号的作用已经不像 C、Java 中那么重要了,Python 中的分号可以省略,主要通过换行来识别语句的结束。例如: print "my name is MaXiangLin" print "my name is MaXiangLin"; 这两行代码是等价的,输出的结果也是相同的。如果需要在一行代码中书写多条语句,就 必须使用分号分隔每条语句,否则 Python 无法识别语句之间的间隔。例如: # 使用分号分隔语句 x = 1 ; y = 2 ; z = 3 在该语句中有 3 条赋值语句,语句之间需要用分号隔开,如果不隔开,Python 解释器将不 能正确解释,并提示如下语法错误: SyntaxError: invalid syntax 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 27 分号不是 Python 推荐使用的符号,Python 倾向于使用换行符作为每条语句的分隔, 简单直白是 Python 语法的特点。通常一行只写一条语句,这样便于阅读和理解程 序。一行写多条语句是不赞成使用的编码规范。 2.2 数 值 交互式 Python 解释器可以当做功能非常强大的计算器使用,当需要计算两个数字类型的 数据相加、相减等时,需要在 Python 解释器中输入两个数字,并使用运算符将其连接,形成 一个表达式,最后得到计算的结果。本节将介绍 Python 中的数字类型以及如何灵活运用不同 类型的数字计算出不同类型的值。 视频教学:光盘/videos/02/数值.avi 长度:10 分钟 基础知识——数值类型 数字提供了标量贮存和直接访问。它就是不可更改的一种数据类型,也就是说变更数字的 值会生成新的对象。Python 支持 6 种数字类型,分别是整型、长整型、布尔型、双精度浮点型、 十进制浮点型和复数。 1.整型 Python 有 3 种整数类型,分别是布尔型、长整型和标准整数类型。其中,布尔类型只有两 个值,即 1 表示 True,0 表示 False;常规的整型是绝大多数系统都能识别的整型;Python 也 有长整数类型,不要将 Python 的长整数与 C 语言的长整数混淆。Python 的长整数所能表达的 范围远远超过 C 语言的长整数。事实上,Python 长整数仅受限于用户计算机的虚拟内存的大 小。换句话说,Python 能轻松表达无穷大的整数。下面来了解一下 Python 的整数类型的运算。 1) 布尔型 从 Python 2.3 开始,布尔类型被添加到 Python 的数据类型中。尽管布尔值看上去是 True 和 False,但事实上是整数类型的子类,不能再被继承而生成它的子类。尽管布尔值由常量 True 和 False 表示,如果将布尔值放到一个数值上下文环境中(比方将 True 与一个数字相加),True 会被当做整数值 1,而 False 则会被当成整数值 0。复数(包括-1 的平方根,即所谓的虚数)在其 他语言中通常不被直接支持(一般通过类来实现)。 2) 标准整数类型 Python 的标准整数类型是最通用的数字类型,在大多数 32 位机器上,标准整数类型的取 值范围是-2 147 483 648 至 2 147 483 647。如果在 64 位机器上使用 64 位编译器编译 Python, 那么在这个系统上的整数将是 64 位。在 Python 解释器中输入 sys.maxint 表示最大整数, -maxint-1 表示最小整数。Python 标准整数类型等价于 C 语言中的长整型。整数一般以十进制 表示,但 Python 也支持八进制或十六进制。八进制整数以数字 0 开始,十六进制整数则以 0x 或 0X 开始。 28 Python Web 开发学习实录 3) 长整型 长整数类型是标准整数类型的超集,当程序需要使用比标准整数类型更大的整数时,长整 数类型就有用武之地了。在一个整数值后面加个 L(大小写都可以),就表示这个整数是长整数 类型,它可以是十进制、八进制或十六进制。 Python 的长整型类似于 Java 中的 BigInteger 类型。从长远来看,整型与长整型正 在逐步统一为一种整数类型。从 Python 2.3 开始,就不会出现整型溢出的错误, 结果会被自动转换为长整数。在未来版本的 Python 中,两种整数类型将会无缝结 合,长整数后缀 L 也会变得可有可无。 Python 可以处理一些数值非常大的整数。 >>>880000000000000000 88000000000000000L 在上面的代码中,数字后面加了一个 L。普通整数不能大于 2 147 483 647(也不能小于 -2 147 483 648),诸如这么大的数,建议大家使用长整型来表示。长整型书写方法和普通整数 一样,只是在结尾多了一个 L(这里也可以使用小写的“l”,只是小写的“l”容易与数字“1” 混淆,因此不建议大家使用小写)。 在上面的代码中,Python 把整数转换为了长整型数,那么能不能对更庞大的数字进行计算 呢?下面来看段代码: >>> 123456789987654321L*123456789987654321L+123456789987654321 15241578994055784324188385777625362L 如上面代码所示,长整型数与标准整型数是可以混淆使用的。在绝大多数情况下,不用在 意长整型数和标准整型数的区别,除非需要进行类型检查。 如果使用 Python 2.2 以下的版本,会看到如下的代码片段: >>>88000000000000000 OverflowError:integer literal too large 2.双精度浮点型 Python 中的浮点数类似于 C 语言中的 double 类型,是双精度浮点数,可以直接用十进制 或科学计算法表示。每个浮点数占 8 个字节(64 比特),完全遵守 IEEE 754 规范(52M/11E/1S), 其中 52 比特用于表示底,11 比特用于表示指数(可表示的范围大约是正负 10 的 308.25 次方), 剩下的 1 比特表示符号。实际精度依赖于机器架构和创建 Python 解释器的编译器。 浮点数的表示方法通常使用一个小数点和一个可选的后缀 E(大小写都可以,表示科学计数 法),在 E 和指数之间可以用正(+)或负(-)表示指数的正负(如果是正数,可以省略前面的+号), 例如: -1.609E-19 3.复数 一个实数(整数或负数)和一个虚数(虚拟的数)的组合构成一个复数,一个复数是一对有序 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 29 浮点数(x,y),表示为 x+yj,其中 x 是实数部分,y 是虚数部分。虚数是不能单独存在的,它总 是和一个值为 0.0 的实数部分一起构成一个复数,并且实数部分和虚数部分都是浮点数,虚数 部分必须有后缀 j 或 J。下面是一些复数的例子: 64.254+2.5j 0+2j 9.54847754-8.31441J 复数对象拥有的属性如表 2-1 所示。 表 2-1 复数属性 属 性 描 述 num.real 该复数的实数部分 num.imag 该复数的虚数部分 num.conjugate() 返回该复数的共轭复数对象 下面编辑一段代码,具体了解使用复数的不同属性得到的值是怎样的。在 Python 的解释 器中编辑代码,如图 2-1 所示。 图 2-1 使用复数属性 4.十进制浮点数 从 Python 2.4 起,十进制浮点数成为一个 Python 特性。十进制浮点型不是内建类型,必须 先导入 decimal 模块才可以使用这种数值类型。例如,由于在二进制表示中有一个无限循环片 段,在 Python 的解释器中输入 3.1,如下面的代码: >>>3.1 3.1000000000000001 为什么会这样呢?因为绝大多数 C 语言的双精度实现都遵守 IEEE 754 规范,其中 52 位用 于底。因此浮点值只能有 52 位精度,类似这样的值的二进制表示只能像上面那样被截断。在 这种情况下就需要使用十进制浮点型来表示该数据。首先必须导入 decimal 模块以便使用 Decimal 类,代码如下: 30 Python Web 开发学习实录 >>>from decimal import Decimal 下面编辑一段代码,具体介绍 Python 中的十进制浮点数在应用中发挥着怎样的作用。代 码片段如图 2-2 所示。 图 2-2 十进制浮点数的使用情况 2.3 制作超市购物清单 Python 中变量名称规则与其他大多数高级编程语言是相同的,都是受 C 语言的影响(可以 说这门语言本身就是用 C 语言写成的)。本节将介绍 Python 中的变量与赋值。 视频教学:光盘/videos/02/变量与赋值.avi 长度:7 分钟 2.3.1 基础知识——标识符的命名 标识符是用来标识某种对象的名称。在命名标识符时,需要遵循下列规则。 (1) 标识符的第一个字符必须是字母(大小写均可),或者是一个下划线(“_”)。 (2) 以下划线开头的标识符是有特殊意义的,其中:  以单下划线开头的(_foo)代表不能直接访问的类属性,需通过类提供的接口进行访问, 也不能用 from xxx import *导入。  以双下划线开头的(__foo)代表类的私有成员。  以双下划线开头和结尾的(__foo__)代表 Python 中特殊方法专用的标识,例如__init__() 代表类的构造函数。 (3) 标识符名称的其他部分可以由字母(大小写均可)、下划线(“_”)或数字(0~9)组成。 (4) 标识符名称对大小写敏感。例如,count 和 Count 不是同一个标识符。 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 31 有效的标识符名称的例子,例如 i、j、_myname、my_name_123 或 abc23_d7。无效的标识 符名称的例子,例如 this is spaced out 或 my-name。 2.3.2 基础知识——变量与赋值 变量是标识符的一个例子。变量名仅仅是一些字母开头的标识符,所谓字母开头,就是指 以大小写字母开头,另外还可以是下划线开头,其他字符可以是数字、字母(大小写均可)或 下划线。Python 中的变量名对大小写也是非常敏感的,也就是说 cOdE 与 CoDe 是两个不同的 变量。 Python 是动态类型的语言,不需要预先声明变量的类型。变量基本上就是代表某值的名字。 举例来说,如果希望用 i 代表 9,那么只需执行下面的语句即可: >>>i=9 这样的操作称为赋值,即值 9 被赋给变量 i。变量的类型和值在赋值的那一刻就被初始化 了。该语句表示:变量 i 的类型为 int 类型,初始化值为 9。变量赋值通过等号来执行,例如: >>> price=99.9 >>> count=100 >>> name='Tom' >>> total=price*count*0.8 上面是 4 个变量的赋值语句:第一个是浮点数赋值,第二个是整数赋值,第三个是字符串 赋值,第四个是浮点数乘法赋值。Python 还支持递增或递减赋值,例如: >>> count=count+1 >>> count 101 Python 同时也支持增量赋值,也就是将运算符和等号合并在一起,例如: >>> count=count*10 >>> count 1010 可以改成增量赋值方式来表示,例如: >>> count*=10 >>> count 1010 Python 不支持 C 语言中的自增 1(++)或自减 1(--)运算符,因为+和-也是单目运算 符,Python 会将++n 解释为 n,将--n 解释为-(-n),从而得到 n。 2.3.3 基础知识——局部变量 局部变量就是只能在函数或代码段内使用的变量。函数或代码段一旦结束,局部变量的生 命周期也将结束,在函数或代码段外是调用不到的。局部变量的作用范围只在局部变量被创建 32 Python Web 开发学习实录 的函数或代码段内有效。例如,在函数 myFun()中定义了一个局部变量,则该局部变量只能被 myFun()访问,其他函数或代码段无法访问 myFun()函数中定义的这个变量,如图 2-3 所示。 文件1 myFun() 局部变量 其他函数或代码段 文件2 局部变量只能被 myFun()访问文件2不能访问文 件1的局部变量 局部变量不能被文件1 中的其他函数或代码 段访问 图 2-3 局部变量的作用范围 下面来看一个完整的例子。 class MyClass: # 定义一个类 MyClass def myFun (): # 在类 MyClass 中定义函数 myFun() num=12 # 在函数 myFun()中定义局部变量 num print 'myFun num='+str(num) def myFun2 (): # 在类 MyClass 中定义另一个函数 myFun2() num=num+1 # 在函数 myFun2()中调用 myFun()函数中的局部变量 num,并重新赋值 print 'myFun2 num='+str(num) num*=10 # 在类 MyClass 中调用 myFun()函数中的局部变量 num,并重新赋值 print 'MyClass num='+str(num) 在该段代码中,首先定义了一个名称为 MyClass 的类,然后在类中定义了两个函数,分别 为 myFun()和 myFun2()。在函数 myFun()中定义了局部变量 num,并在 myFun()函数中使用 print 语句将其调用并输出,输出的结果为: myFun num=12 接着在 MyClass 类中定义了另一个函数 myFun2(),并在该函数中调用 myFun()函数中的局 部变量 num,使其值发生改变,最后输出的结果为: NameError: name 'myFun2' is not defined 最后在 MyClass 类中调用了 myFun()函数中的局部变量 num,并使值扩大 10 倍,最后输 出的结果如下: num*=10 NameError: name 'num' is not defined Python 创建的变量就是一个对象,Python 会管理变量的生命周期。Python 对变量 的回收也是采用垃圾回收机制。 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 33 2.3.4 基础知识——全局变量 全局变量是能够被不同的函数、类或文件调用的变量,在函数之外定义的变量即为全局变 量。全局变量默认可以被文件内部的任何函数或任何代码段访问,外部文件也可以访问。但是, 如果设置了该变量为私有变量,则外部文件是不可以调用的。例如,在文件 1 中定义了一个全 局变量,文件 1 中的所有函数是可以访问该全局变量的,此外,对于文件 1 以外的文件也可以 访问,如图 2-4 所示。 文件1 myFun() 全局变量 文件2全局变量可以被 外部文件访问 全局变量可以被 myFun()函数访问 图 2-4 全局变量的作用范围 全局变量通常在文件的开始处定义。 下面再来看一段代码。 _num = 12 # 在文件的开头定义全局变量 def myFun (): # 在文件中定义函数 myFun global _num # 这里使用了 global 保留字,用于引用全局变量 num = _num+1 # 调用全局变量,使值增 1 后赋给变量 num print 'myFun num='+str(num) myFun() # 调用函数 myFun() 在该段代码中,首先在文件的开头定义了一个全局变量_num,并初始化值为 12。接着在 文件中定义了名称为 myFun()的函数,在该函数中使用了 global 保留字,用于引用全局变量, 使全局变量的值增 1 后赋值给 num 变量,并将 num 变量的值输出。在文件的最后调用了函数 myFun()。执行该段代码,输出的结果如下: myFun num=13 如果不使用 global 保留字引用全局变量,有时候会出现不正常的结果。因此在引 用全局变量时,要先使用 global 保留字将其引用。 34 Python Web 开发学习实录 2.3.5 实例描述 本人比较喜欢购物,基本上是每逢周末都会向超市投入一大笔资金,每次看着购物清单上 的共计×××元,我都心疼得要命。下面给大家分享一下这周的购物清单吧。 2.3.6 实例应用 【例 2-1】制作超市购物清单。 (1) 声明变量,以 pro_name_num 的形式命名标识商品名称的变量,用以记录商品名称。 初始化商品 1 的名称,语句如下: >>> pro_name_1='特仑苏' (2) 声明变量,以 pro_price_num 的形式命名标识商品单价的变量,用以记录商品的单价。 初始化商品 1 的单价,语句如下: >>> pro_price_1=48 (3) 因为购买的“特仑苏”的数量为一箱,所以这里不再标识。声明计算“特仑苏”总价 的变量,以 pro_total_num 的形式来标识,计算语句如下: >>> pro_total_1=pro_price_1*1 (4) 按照同样的步骤,声明并初始化商品 2 的名称、单价,同时计算出商品 2 的总价,语 句如下: >>> pro_name_2='卡通垃圾桶' >>> pro_price_2=2.5 >>> pro_total_2=pro_price_2*1 (5) 还是同样的步骤,声明并初始化商品 3 的名称和单价,不同的是,商品 3 的数量不是 1,需要同商品的名称和单价一样声明并初始化,购买的商品数量以 pro_count_num 的形式为 变量来标识。商品 3 的购买清单如下: >>> pro_name_3='舒洁面巾纸' >>> pro_price_3=3.3 >>> pro_count_3=4 >>> pro_total_3=pro_price_3*pro_count_3 (6) 继续编写商品 4 和商品 5 的购买清单,语句如下: >>> pro_name_4='桂格玉米味燕麦片' >>> pro_price_4=23 >>> pro_total_4=pro_price_4*1 >>> pro_name_5='dove 洗面奶' >>> pro_price_5=16.8 >>> pro_count_5=4 >>> pro_total_5=pro_price_5*pro_count_5 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 35 (7) 最后将 5 件商品的清单打印出来,语句如下: >>> print '---------------购物清单---------------';\ print '商品名称'+' '+'数量'+' '+'单价'+' '+'总计';\ print pro_name_1+' '+'1'+' '+str(pro_price_1)+' '+str(pro_total_1);\ print pro_name_2+' '+'1'+' '+str(pro_price_2)+' '+str(pro_total_2);\ print pro_name_3+' '+str(pro_count_3)+' '+str(pro_price_3)+' '+str(pro_total_3);\ print pro_name_4+' '+'1'+' '+str(pro_price_4)+' '+str(pro_total_4);\ print pro_name_5+' '+str(pro_count_5)+' '+str(pro_price_5)+' '+str(pro_total_5) 2.3.7 运行结果 将上面的代码编辑之后,按回车键,Python 解释器将打印出购物清单列表,内容如下: ---------------购物清单--------------- 商品名称 数量 单价 总计 特仑苏 1 48 48 卡通垃圾桶 1 2.5 2.5 舒洁面巾纸 4 3.3 13.2 桂格玉米味燕麦片 1 23 23 dove 洗面奶 4 16.8 67.2 2.3.8 实例分析 源码解析 在上面的例子中,声明的所有变量都是以字母开头。这里需要注意的是,变量只能以字母 (大小写均可)或下划线(“_”)开头,而不能以数字开头,例如 9pro_name 是错误的。“\”表示 换行符,如果需要换行,只需要在句尾添加\即可。 2.4 用户登录验证 Python 中的字符串被定义为引号之间的字符集合。几乎可以保证在每个 Python 程序中都 需要用到字符串,可想而知字符串在一种语言中占据着很重要的位置。本节介绍 Python 中字 符串的声明和使用。 视频教学:光盘/videos/02/字符串.avi 长度:19 分钟 36 Python Web 开发学习实录 2.4.1 基础知识——字符串的声明与表示 Python 支持使用成对的单引号或双引号,而三引号(3 个连续的单引号或者双引号)可以用 来包含特殊字符。那么,字符串与字符串的连接使用什么符号呢?字符串都有哪些比较常用的 函数呢?下面将针对这些内容展开详细的讲解。 1.单引号、双引号和三引号字符串 无论是单引号字符串、双引号字符串或者三引号的字符串,在 Python 程序中都是缺一不 可的,它们各司其职。 1) 单引号字符串 使用单引号指示普通的字符串,例如: >>> 'my name is MaXiangLin' 'my name is MaXiangLin' 所有的空白,即空格和制表符都照原有的样子保留,标识普通的字符串(不带任何引号的 字符串)。 2) 双引号字符串 在双引号中的字符串与单引号中的字符串的使用是相同的,例如: >>> "my name is MaXiangLin" 'my name is MaXiangLin' 这里让人吃惊的是:当 Python 打印出字符串时发现,使用双引号的字符串打印出来的却 是使用了单引号的字符串,这有什么区别吗?事实上,这里无论是使用了单引号的字符串还是 使用了双引号的字符串,打印出来的结果都是一样的,没有任何区别。但是在某些情况下,两 者是必须同时使用的,缺一不可。 >>> "what's your name" "what's your name" >>> '"my name is MaXiangLin" I say' '"my name is MaXiangLin" I say' 在上面的代码中,第一条语句使用了单引号的字符串(即撇号),这时候就不能再使用单引 号将整个字符串括起来了。如果使用单引号将其括起来,Python 的解释器是无法解释的,会输 出如下的错误信息: >>> 'what's your name' SyntaxError: invalid syntax 第二条语句使用了单引号将整个字符串括了起来,其中包含了一个双引号的字符串。 3) 三引号字符串 使用三引号的字符串可以指示一个多行的字符串,并且在这个三引号的字符串中可以自由 地使用单引号和双引号。例如: >>> '''This is a multi-line string.This is the first line. This is the second line. 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 37 "What's your name?" she said. I say"my name is MaXiangLin"''' 'This is a multi-line string.This is the first line. This is the second line. "What\'s your name?" she said. I say"my name is MaXiangLin"' 2.转义引号字符串 假设需要在一个字符串中包含一个单引号,那么如何指示这个字符串呢?例如字符串 What’s your name?。前面已经讲解过,可以使用双引号将字符串 What’s your name?括起来指 示它,而不可以用'What’s your name?'来指示,因为使用单引号将它括起来,Python 解释器将 不明白这个字符串从何处开始,到何处结束。能指明这个字符串的开始位置和结束位置,除 了使用双引号将其括起来之外,还可以通过转义符来完成这个任务,即使用'\'来指示单引号, 例如: >>> 'what\'s your name' "what's your name" 对于在双引号字符串中使用双引号的情况,也可以借助转义符来表示。另外,可 以使用转义符\\来指示反斜杠\本身。 需要注意的是,在一个字符串中,行尾出现一个反斜杠表示字符串换行,下一行继续,而 不是开始一个新的行。例如: >>> "This is the first.\ This is the second." 'This is the first.This is the second.' 3.字符串的连接 下面先来看一段代码,即通过另外一种方式输出同样的字符串。 >>> 'what\'s your name' "my name is MaXiangLin" "what's your namemy name is MaXiangLin" 在上面的代码中,只是编写了两个字符串,Python 会自动把这两个字符串连接在一起,合 成一个字符串输出。不过,它只是在同时编写了多个字符串并且需要一个字符串紧接着另一个 字符串的情况下才有效。例如,下列情况是无效的: >>> a='what\'s your name?' >>> b='my name is MaXiangLin' >>> a b SyntaxError: invalid syntax 通过上面代码可以发现,直接将多个字符串紧接着输出并不是连接字符串的方法,只是书 写字符串的一种特殊方式而已。那么,如何连接字符串呢?在 2.3.6 节的案例中,我们已经接 触过字符串的连接,那就是使用+号即可将多个字符串连接在一起。例如: >>> 'what\'s your name?'+'my name is MaXiangLin' "what's your name?my name is MaXiangLin" 38 Python Web 开发学习实录 >>> a='what\'s your name?' >>> b='my name is MaXiangLin' >>> a+b "what's your name?my name is MaXiangLin" 4.字符串的表示函数 Python 提供了两个函数来表示字符串。  str()函数:把值转换为合理形式的字符串,以便用户理解。  repr()函数:创建一个字符串,以合法的 Python 表达式的形式来表示值。 下面使用这两个函数来创建一些例子,具体了解一下它们的使用方法。 >>> print repr('my name is MaXiangLin') 'my name is MaXiangLin' >>> print repr(123456L) 123456L >>> print '-------------' ------------- >>> print str('my name is MaXiangLin') my name is MaXiangLin >>> print str(123456L) 123456 在上面的代码中,首先使用了 repr()函数将字符串和长整型的数值以合法的 Python 表达式 的形式表示,然后使用 print 语句输出,输出的结果保持了原有状态。接着使用 str()函数将字 符串和长整型的数值转换为字符串,并使用 print 语句输出,输出的字符串不再带有单引号, 长整型不再带有 L 字符,而是以字符串的形式输出。 简而言之,str()和 repr()函数是将 Python 的值转换为字符串的两种方式,其中函数 str()使 字符串更易于阅读,而 repr()则把结果字符串转换为合法的 Python 表达式。 2.4.2 基础知识——输入与输出 字符串的输入与输出在 Python 程序中也是必不可少的,下面详细介绍 Python 中字符串的 输入与输出。 1.字符串的输出语句——print 语句 细心的同学可能已经注意到,所有通过 Python 打印的字符串都是被引号括起来的,Python 打印时会保持用户输入字符串的原有状态,而不是单独将用户输入的字符串打印出来。那么, 如何改变这种状况呢?下面使用 print 语句进行输出。 >>> 'my name is MaXiangLin' 'my name is MaXiangLin' >>> 123456L 123456L >>> print 'my name is MaXiangLin' my name is MaXiangLin >>> print 123456L 123456 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 39 在上面的代码中,先使用了单引号将字符串输出,输出的结果保持了原有的状态;接着输 入一个长整型的数字,Python 解释器将输入的长整型包含字符 L 输出。接着使用 print 语句将 与上面相同的字符串和长整型数字输出,但输出结果中不再包含单引号和字符 L,也就是说长 整型数 123456L 被转换成了数字 123456,而且在显示时将转换后的数字 123456 输出。但使用 print 语句后,可能会对该数值是整型还是长整型产生不明确的概念。 2.字符串的输入函数——input()和 raw_input()函数 有时候往往需要用户向程序中输入数据,这时就需要用到 Python 的 input()和 raw_input() 函数。其中,input()函数是把读入的用户输入数据默认为 Python 表达式,而 raw_input()函数是 把读入的数据转换为字符串。下面来看一段代码。 >>> input('what\'s your name?') what's your name?'my name is MaXiangLin' 'my name is MaXiangLin' >>> input('你的年龄:') 你的年龄:23 23 在上面的代码中,首先使用了 input()函数询问用户的名字?按回车键后,Python 会将用户 的询问输出,同时等待用户回答,而当用户的回答是字符串时,需要使用引号(双引号、单引 号或三引号)将回答的内容括起来。然而,要求用户使用引号输入内容是不合理的。下面再来 看一段代码,了解一下使用 input()函数的不足之处。 >>> name= input('what\'s your name?') what's your name?'MaXiangLin' >>> print "my name is"+name+"!" my name isMaXiangLin! >>> age=input('你的年龄:') 你的年龄:23 >>> print "我今年"+age+"岁了!" Traceback (most recent call last): File "", line 1, in print "我今年"+age+"岁了!" TypeError: cannot concatenate 'str' and 'int' objects 在上面的代码中,首先使用名称为 name 的变量来存储用户输入的字符串 MaXiangLin,然 后使用+连接符将 name 值与其他字符串连接并使用 print 语句输出,这样是正确无误的。再看 下面的语句,使用了名称为 age 的变量来存储用户输入的年龄数值 23,然后也使用+号连接符 将其连接,却出现错误,提示需要使用 str()函数将 int 类型的数值转换成字符串。很明显,使 用 input()函数只是将读取的用户输入数据转换成 Python 合法的表达式。 诸如上面两种情况,体现了使用 input()函数的缺点,因此需要使用 Python 的另一个函 数——raw_input(),它会把所有的输入当作原始数据,然后将其放入字符串中。 >>> raw_input('what\'s your name?') what's your name?my name is MaXiangLin 'my name is MaXiangLin' >>> raw_input('我的年龄:') 40 Python Web 开发学习实录 我的年龄:23 '23' >>> age=raw_input('我的年龄:') 我的年龄:23 >>> print "我今年"+age+'岁了!' 我今年 23 岁了! 在接收用户输入数据时,一般情况下使用 raw_input()函数而不使用 input()函数。 2.4.3 实例描述 在 Web 应用程序中往往需要用户登录,才可以进入系统的主页面。实现用户登录就需要 用户输入用户名和密码,然后检测用户输入的数据是否合法,只有检测通过才能让用户登录。 下面就来模拟一下这个功能。 2.4.4 实例应用 【例 2-2】检测用户输入数据,实现用户登录功能。 (1) 声明变量 username,并使用 raw_input()函数接受用户输入的数据,语句如下: >>> username=raw_input('您的用户名:') (2) 按回车键,将字符串“您的用户名:”输出,并等待用户输入。 您的用户名: (3) 用户在冒号后输入 admin 字符串。 您的用户名:admin (4) 接着声明变量 password,并使用 raw_input()函数接受用户输入的数据,语句如下: >>> password=raw_input('您的密码:') (5) 按回车键,将字符串“您的密码:”输出,并等待用户的输入。用户在冒号后输入 admin 字符串。 您的密码:admin (6) 使用 if 语句判断用户输入的用户名和密码是否合法,如果合法,输出用户登录成功信 息。语句如下: >>> if(username=='admin')and (password=="admin"): print "恭喜您!您输入的用户名和密码是合法的,登录成功!" 这里使用了 if 控制语句,在第 3 章中将具体讲解该控制语句的使用方法,这里暂不解释。 2.4.5 运行结果 编写完上面的 Python 语句后,当前用户名和密码均为 admin,符合登录用户的权限,即输 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 41 出用户登录成功信息。按回车键,在 Python 解释器中输出下列结果: 恭喜您!您输入的用户名和密码是合法的,登录成功! 2.4.6 实例分析 源码解析 在上面的例子中,分别使用了 raw_input()函数来接受用户输入的用户名或密码,并使用了 两个变量分别将用户输入的用户名和密码存储起来。接着使用 if 控制语句,检测用户输入的用 户名或密码是否合法,在 if 语句块中使用了 print 语句输出用户登录成功的提示信息。 2.5 计算圆的周长和面积 Python 的运算符包括赋值运算符、算术运算符、关系运算符和逻辑运算符。表达式就是将 不同类型的数据(包括常量、变量和函数)用运算符按一定的规则连接起来的式子。本节将详细 介绍 Python 运算符与表达式的使用方法。 视频教学:光盘/videos/02/ Python 中的运算符与表达式.avi 长度:13 分钟 2.5.1 基础知识——算术运算符与算术表达式 算术运算符包括四则运算符、求模(余)运算符和求幂运算符。Python 中的算术运算符和表 达式如表 2-2 所示。 表 2-2 Python 中的算术运算符和表达式 算术运算符 算术表达式 描 述 + x + y 加法运算 - x - y 减法运算 * x * y 乘法运算 / x / y 除法运算 % x % y 求模(余)运算 ** x**y 求幂运算 解释器的行为就像一个计算器,可以向它输入一个表达式,它会返回结果。表达式的语法 简明易懂,+、-、*、/和大多数语言中的用法相同,用于计算,括号用于分组。例如: >>> 5+5 10 >>> (200-50*2)/25 4 42 Python Web 开发学习实录 在上面的代码中,首先计算 5+5 的结果为 10,接着使用括号将其 200-50*2 先计算出结果 再除以 25,结果为 4。在绝大多数情况下,常用的算术运算符的功能和计算器的功能是相同的。 但 Python 存在一个潜在的陷阱——整数除法,下面看一段代码。 >>> 3/6 0 发生了什么呢?一个整数(无小数部分的数字)被另外一个整数(无小数部分的数字)整除, 计算结果的小数部分也被截除了,只留下整数部分。在 Python 2.5 版本中,当使用 x/y 形式进 行运算时,如果 x 和 y 是整数,则对运算的结果进行截取,只留整数部分。下面再看一段代码。 >>> 3/-6 -1 顾名思义,3/-6 的商为-0.5,返回的是比-0.5 更小的且最接近的数值-1。 有些时候,这个功能还是比较可用的,但通常情况下只需要普通的除法即可。那么怎么实 现呢?这里提供了两种有效的解决方案:用实数(包含小数点的十进制数)而不是整数进行运算, 或者让 Python 改变除法的执行方式。实数在 Python 中被称为浮点数(float),如果参与除法的两 个数中有一个数为浮点数,结果亦为浮点数。 >>> 3.0/6.0 0.5 >>> 3.0/6 0.5 >>> 3/6. 0.5 从 Python 2.2 开始,除法运算符除了/之外,还引入了另一个除法运算符//(地板除),后一 种运算符只用于整除法。对于除法运算符/,默认时的行为跟 Python 2.2 之前一样,它视操作数 而定,既可以进行整除,也可以进行真除法。如果想让这两个运算符有一个明确的分工,即/ 只用于真除法,而//仅用于整除法,则需要作以下声明: from __future__ import division 下面来看一下两种除法运算符在作以上声明前后的区别。 >>> 5/6 0 >>> 5//6 0 >>> 5.0/6 0.83333333333333337 >>> 5.0//6 0.0 >>> from __future__ import division >>> 5/6 0.83333333333333337 >>> 5//6 0 >>> 5.0/6 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 43 0.83333333333333337 >>> 5.0//6 0.0 在该段代码中,在声明之前,对表达式 5/6 进行计算时,结果为 0,这是因为参加运算的 两个操作数都是整数,运算符 / 进行的是整除法。而表达式 5.0/6 的 结 果 却 是 0.83333333333333337,这是因为操作数中的 5.0 是浮点型数字,所以运算符/进行的是真除法。 表达式 5//6 和 5.0//6 进行求值时,进行的都是整除法,不过返回值一个是整型,另一个是浮点 型。当使用 import 语句之后,除法运算符/只能用于真除法,因此 5/6 和 5.0/6 的返回值都是真 正的商。 到目前为止,我们已经了解了基本的算术运算符(加、减、乘和除)。除此之外,还有一个 非常有用的运算符——求余运算符%。先来看下面的代码。 >>> 3%6 3 >>> 100%30 10 >>> 100%20 0 >>> 2.75%0.5 0.25 在上面的代码中,3%6 得到的商为 0,余数为 3,因此输出结果为 3;100%30 得到的商为 3,余数为 10,因此输出结果为 10;而浮点数 2.75%0.5 得到的商为 5,余数为 0.25,因此输出 结果为 0.25。 最后一个运算符就是幂(乘方)运算符**,先看一段代码。 >>> 3**3 27 >>> -3**2 -9 >>> (-3)**2 9 幂运算符比取反运算符(一元减运算符)的优先级要高,所以-3**2 与-(3**2)是等 价的。 2.5.2 基础知识——关系运算符与关系表达式 关系运算符是对两个对象进行比较的符号。Python 中的关系运算符和表达式如表 2-3 所示。 表 2-3 Python 中的关系运算符和表达式 关系运算符 关系表达式 描 述 < x < y 小于 > x > y 大于 44 Python Web 开发学习实录 续表 关系运算符 关系表达式 描 述 <= x <= y 小于或等于 >= x >= y 大于或等于 == x == y 等于 != 或 <> x != y 或 x <>y 不等于 下面演示一下关系运算符的逻辑输出: print 9 > 6 print 2 >= 2 print 9 == 9 print 2!=2 print 6<>9 在第 1 行代码中,9>6 的逻辑关系成立,输出结果为: True 在第 2 行代码中,2>=2 的逻辑关系成立,输出结果为: True 在第 3 行的代码中,9==9 的逻辑关系成立,输出结果为: True 在第 4 行的代码中,2!=2 的逻辑关系不成立,输出结果为: False 在第 5 行的代码中,6<>9 的逻辑关系成立,输出结果为: True 2.5.3 基础知识——逻辑运算符与逻辑表达式 逻辑表达式就是用逻辑运算符和变量连接起来的式子。Python 语言中的逻辑运算符分为 3 种,分别是:逻辑与、逻辑或和逻辑非。C、Java 语言的逻辑运算符用&&、||、!来表示,Python 则采用 and、or 和 not 表示。表 2-4 列出了 Python 中的逻辑运算符和表达式。 表 2-4 Python 中的逻辑运算符和表达式 逻辑运算符 逻辑表达式 描 述 and x and y 逻辑与,当 x 为 True 时,才计算 y or x || y 逻辑或,当 x 为 False 时,才计算 y not not x 逻辑非 下面演示逻辑表达式的运算。 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 45 print 2 < 3 and 4 < 5 print 2 > 3 or 4 > 5 print not ( 2 < 3 and 4 < 5) 在第 1 行的代码中,2<3 的逻辑关系成立,并且 4<5 的逻辑关系也成立,因此使用 and 逻 辑运算符连接两个成立的表达式之后,输出的结果为: True 在第 2 行的代码中,2>3 的逻辑关系不成立,并且 4>5 的逻辑关系也不成立,因此使用 or 逻辑运算符连接两个不成立的表达式之后,输出的结果为: False 在第 3 行的代码中,小括号里的表达式是成立的,即为 True。True 的逻辑非为 False,因 此输出的结果为: False 2.5.4 基础知识——运算符的优先级 Python 运算符在同一个表达式中的优先级是不同的。算术运算符的优先级大于关系运算符 的优先级,关系运算符的优先级大于逻辑运算符的优先级,如图 2-5 所示。 算术运算符 关系运算符 逻辑运算符 先计算算术运算符表达式, 再计算关系运算符表达式 先计算关系运算符表达式, 再计算逻辑运算符表达式 图 2-5 运算符的优先级 如果一个表达式中包含多种类型的运算符,那么 Python 会根据运算符的优先级从高到低 进行计算。Python 中运算符的优先级从高到低的排列顺序如表 2-5 所示。 为了使代码具有更好的可读性,一般使用圆括号“()”来将表达式分组表示,例如 (3>2) && (5>4)。显而易见,系统会先计算圆括号中的表达式,然后再计算&& 操作。 46 Python Web 开发学习实录 表 2-5 Python 运算符的优先级排序 运 算 符 描 述 expression, ... 字符串转换 {key:datum, ...} 字典显示 [expression, ...] 列表显示 (expression , ...) 绑定或元组显示 f (arguments ...) 函数调用 x[index:index] 寻址段 x[index] 下标 x.attribute 属性 ** 指数 -x 按位反转 +x,-x 正负号 *,/,% 乘、除、求余 +,- 加、减 <<,>> 移位 & 按位与 ^ 按位异或 | 按位或 <,<=,>,>=,!=,== 比较运算符 is,is not 相同测试 in,not in 成员测试 not x 布尔非 and 布尔与 or 布尔或 lambda Lambda 表达式 2.5.5 实例描述 正月十五闹元宵,很多城市以放烟花来庆贺这个节日,以安全为前提规定放烟花的范围为 半径 1.5 米的圆。也就是说,在放烟花的时候,只能在这个半径为 1.5 米的圆内放置炮竹,然 后才可以点燃。那么,这个圆有多大呢?下面来计算一下。 2.5.6 实例应用 【例 2-3】计算圆的周长和面积。 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 47 (1) 像 C 语言一样,等号用来给变量赋值,并且分配的值是只读的。在 Python 解释器中声 明圆的半径变量为 r,并将 1.5 赋值给它,代码如下: >>> r=1.5 (2) 圆的周长公式为 c=2∏R,其中∏的数值约为 3.14,R 表示的值是半径长 1.5 米。接下 来继续在编辑器中输入如下代码: >>> c=2*3.14*r 这个表达式表示将计算出的结果赋值给变量 c。其实,同一个值可以同时赋给几个变量的, 例如: >>> x=y=z=3 >>> x 3 >>> y 3 >>> z 3 (3) 将计算出来的圆周长输出。 >>> c 9.4199999999999999 (4) 接着编辑代码,计算圆的面积,公式为∏R^2,并将结果输出。 >>> s=3.14*(r**2) >>> s 7.0650000000000004 2.5.7 运行结果 查看 Python 解释器的内容,如图 2-6 所示。 图 2-6 计算圆的周长和面积的代码清单 48 Python Web 开发学习实录 2.5.8 实例分析 源码解析 通过上面的例子可以看出,Python 中的计算和其他语言中的计算是相同的。在上面的例子 中,变量 r 的值为 1.5,即半径的长。在下面的计算中,如果使用了半径,直接调用 r 即可。当 将计算结果赋值给变量 c 或者 s 后,在解释器中直接输入变量名称,即可输出变量的值。 2.6 常见问题解答 2.6.1 Python 中 3 种字符串引号的区别 JDK 安装错误提示:The download file appears to be corrupted. Please refer to the Troubleshooting section of the Installation. 网络课堂:http://bbs.itzcn.com/thread-9851-1-1.html 我刚接触 Python 语言,在查找资料的时候,看到字符串很多都是用 3 个引号括起来的, 这与两个引号或者单引号字符串有什么区别呢? 【解决办法】字符串可以用三重引号,例如"""或'''。三重引号中的字符串在行尾不需要换 行标记,且所有的格式都会包括在字符串中。例如: print """hao do you do?""" print ''' I'm eating''' 运行该段代码,输出结果如下: hao do you do? I'm eating 解释器打印出来的字符串与它们输入的形式完全相同。 2.6.2 Python 中文编码问题 Python 中文编码问题! 网络课堂:http://bbs.itzcn.com/thread-15814-1-1.html 今天闲来无事,试着使用 Python 语言开发一个商品信息管理系统,刚声明了一个变量, 就报了一堆错误,真是郁闷啊!代码如下: _proName='联想笔记本' print _proName 窗内网永久网址 www.itzcn.com 第 2 章 练就扎实的基本功 49 运行代码出错,错误为: SyntaxError: Non-ASCII character '\xc1' in file 11.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 【解决办法】字符串在 Python 内部的表示是 Unicode 编码。在做编码转换时,通常需要以 Unicode 作为中间编码,即先将其他编码的字符串解码(decode)成 Unicode,再从 Unicode 编码 (encode)成另一种编码。 decode()函数的作用就是将其他编码的字符串转换成 Unicode 编码,例如 str1.decode ('gb2312'),表示将 gb2312 编码的字符串 str1 转换成 Unicode 编码。encode()函数的作用是将 Unicode 编码转换成其他编码的字符串,例如 str2.encode('gb2312'),表示将 Unicode 编码的字 符串 str2 转换成 gb2312 编码。转换时,一定要先搞明白字符串是什么编码,然后使用 decode() 函数将字符串编码改为 Unicode 编码,然后再使用 encode()函数将编码改为其他编码格式。如 果是在 UTF8 的文件中,该字符串就是 UTF8 编码;如果在 gb2312 编码的文件中,则其编码 为 gb2312。 2.7 习 题 一、填空题 (1) Python 使用符号__________表示注释。 (2) 可以使用__________符号把一行过长的 Python 语句分解成几行。 (3) __________是只能在函数或代码段内使用的变量,函数或代码段一旦结束,局部变量 的生命周期也将结束,在函数或代码段外是调用不到的。 二、选择题 (1) 下列__________语句在 Python 中是非法的。 A.x = y = z = 1 B.x = (y = z + 1) C.x, y = y, x D.x += y (2) 下列表达式的值为 True 的是__________。 A.5+4j > 2-3j B.3>2>2 C.(3,2)< ('a', 'b') D.'abc' > 'xyz' (3) 关于 Python 中的复数,下列说法错误的是__________。 A.表示复数的语法是 real + image j B.实部和虚部都是浮点数 C.虚部必须后缀 j,且必须是小写 D.方法 conjugate 返回复数的共轭复数 三、上机练习 上机练习:实现一个计算器的功能 用户输入两个操作数,并输入一个算术运算符,根据用户输入的运算符(只能是+、-、*和 50 Python Web 开发学习实录 /)来操作两个数,最后计算出结果。运行结果如图 2-7 所示。 图 2-7 计算器的实现
还剩64页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 95 人已下载

下载pdf

pdf贡献者

lomlen

贡献于2011-12-20

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf