新書推薦:
《
东亚世界形成史论(新版)
》
售價:NT$
490.0
《
奶奶的半个心愿 “课本里的作家” 中考热点作家孙道荣2024年全新散文集
》
售價:NT$
190.0
《
天生坏种:罪犯与犯罪心理分析
》
售價:NT$
445.0
《
新能源材料
》
售價:NT$
290.0
《
传统文化有意思:古代发明了不起
》
售價:NT$
199.0
《
无法从容的人生:路遥传
》
售價:NT$
340.0
《
亚述:世界历史上第一个帝国的兴衰
》
售價:NT$
490.0
《
大处着眼:持久战与《论持久战》
》
售價:NT$
390.0
|
編輯推薦: |
本书可以分为4个部分:
本书的前3章介绍Python中的函数。第Ⅱ部分包含第4~7章,介绍Python类与语言对象模型。第Ⅲ部分包含第8章和第9章,介绍字符串与数据。第Ⅳ部分包含无法融入前三部分的所有内容。
|
內容簡介: |
学习编写更出色的代码,让工作流程更加平滑
Python是一门强大且快速增长的动态编程语言。虽然它提供了很多用于编写高级、简洁、可维护代码的工具,但是对于这些技术却一直没有一个清晰的解释。《Python高级编程》为介绍所有Python功能提供了一个入口。每个概念的完整阐述、关于应用程序的讨论、动手指南都将教会你设计更好的架构,以及编写使得应用程序更加健壮与高效的代码。
如果你已经熟悉Python,并期望使用它提供的所有功能,那本书正是为你准备的。
主要内容
◆ 涵盖所有语言的功能,包括函数、如何应用装饰器、上下文管理器与生成器
◆ 介绍Python的类与对象模型、元类、类工厂以及抽象基类
◆ 验证如何操纵Unicode字符串,以及Python2与Python3字
符串的区别学习编写更出色的代码,让工作流程更加平滑
Python是一门强大且快速增长的动态编程语言。虽然它提供了很多用于编写高级、简洁、可维护代码的工具,但是对于这些技术却一直没有一个清晰的解释。《Python高级编程》为介绍所有Python功能提供了一个入口。每个概念的完整阐述、关于应用程序的讨论、动手指南都将教会你设计更好的架构,以及编写使得应用程序更加健壮与高效的代码。
如果你已经熟悉Python,并期望使用它提供的所有功能,那本书正是为你准备的。
主要内容
◆ 涵盖所有语言的功能,包括函数、如何应用装饰器、上下文管理器与生成器
◆ 介绍Python的类与对象模型、元类、类工厂以及抽象基类
◆ 验证如何操纵Unicode字符串,以及Python2与Python3字
符串的区别
◆ 提供Python2与Python3差异的深入讲解,并阐述如何编写跨版本的代码
◆ 探讨单元测试、命令行界面工具以及新的异步编程库
|
關於作者: |
作者简介
Luke Sneeringer是一位经验丰富的Python开发人员,他曾经为诸如FeedMagnet、May Designs以及Ansible在内的多家公司设计、架构和创建多个Python应用程序。他经常作为演讲嘉宾出席Python会议。
|
目錄:
|
目 录
第Ⅰ部分 函 数
第1章 装饰器 3
1.1 理解装饰器 3
1.2 装饰器语法 4
1.3 在何处使用装饰器 6
1.4 编写装饰器的理由 6
1.5 编写装饰器的时机 7
1.5.1 附加功能 7
1.5.2 数据的清理或添加 7
1.5.3 函数注册 7
1.6 编写装饰器 7
1.6.1 初始示例:函数注册表 8
1.6.2 执行时封装代码 9
1.6.3 装饰器参数 16
1.7 装饰类 20
1.8 类型转换 23
1.9 小结 25
第2章 上下文管理器 27
2.1 上下文管理器的定义 27
2.2 上下文管理器的语法 28
2.2.1 with语句 28
2.2.2 enter和exit方法 28
2.2.3 异常处理 29
2.3 何时应该编写上下文管理器 30
2.3.1 资源清理 30
2.3.2 避免重复 31
2.4 更简单的语法 38
2.5 小结 39
第3章 生成器 41
3.1 理解生成器 41
3.2 理解生成器语法 41
3.2.1 next函数 43
3.2.2 StopIteration异常 45
3.3 生成器之间的交互 47
3.4 迭代对象与迭代器 49
3.5 标准库中的生成器 50
3.5.1 range 50
3.5.2 dict.items及其家族 50
3.5.3 zip 51
3.5.4 map 52
3.5.5 文件对象 52
3.6 何时编写生成器 53
3.6.1 分块访问数据 53
3.6.2 分块计算数据 54
3.7 何时使用生成器单例模式 54
3.8 生成器内部的生成器 55
3.9 小结 56
第Ⅱ部分 类
第4章 魔术方法 59
4.1 魔术方法语法 59
4.2 可用的魔术方法 60
4.2.1 创建与销毁 61
4.2.2 类型转换 63
4.2.3 比较 65
4.3 其他魔术方法 75
4.4 小结 76
第5章 元类 77
5.1 类与对象 77
5.1.1 直接使用type 78
5.1.2 type链 80
5.1.3 type的角色 80
5.2 编写元类 81
5.2.1 __new__方法 81
5.2.2 __new__与__init__方法 81
5.2.3 元类示例 82
5.2.4 元类继承 82
5.3 使用元类 84
5.3.1 Python 3 85
5.3.2 Python 2 85
5.3.3 需要跨版本执行的代码怎么办 85
5.3.4 跨版本兼容性在何时重要 86
5.4 何时使用元类 87
5.4.1 说明性类声明 87
5.4.2 类验证 88
5.4.3 非继承属性 90
5.5 显式选择的问题 91
5.6 meta-coding 92
5.7 小结 94
第6章 类工厂 95
6.1 类型回顾 95
6.2 理解类工厂函数 96
6.3 决定何时应该编写类工厂 98
6.3.1 运行时属性 98
6.3.2 避免类属性一致性问题 102
6.3.3 关于单例模式问题的解答 105
6.4 小结 107
第7章 抽象基类 109
7.1 使用抽象基类 109
7.2 声明虚拟子类 110
7.2.1 声明虚拟子类的原因 111
7.2.2 使用register作为装饰器 113
7.2.3 __subclasshook__ 113
7.3 声明协议 115
7.3.1 其他现有的方法 115
7.3.2 抽象基类的价值 118
7.3.3 抽象属性 120
7.3.4 抽象类或静态方法 121
7.4 内置抽象基类 122
7.4.1 只包含一个方法的抽象基类 122
7.4.2 可供集合使用的抽象基类 123
7.4.3 额外的抽象基类 124
7.5 小结 124
第Ⅲ部分 数 据
第8章 字符串与Unicode 127
8.1 文本字符串与字节字符串 127
8.2 包含非ASCII字符的字符串 132
8.2.1 观察区别 132
8.2.2 Unicode是ASCII的超集 133
8.3 其他编码 133
8.4 读取文件 135
8.4.1 Python 3 135
8.4.2 Python 2 137
8.4.3 读取其他源 137
8.4.4 指定Python文件编码 137
8.5 严格编码 139
8.5.1 不触发错误 139
8.5.2 注册错误处理程序 140
8.6 小结 141
第9章 正则表达式 143
9.1 使用正则表达式的原因 143
9.2 Python中的正则表达式 144
9.2.1 原始字符串 144
9.2.2 match对象 145
9.2.3 找到多个匹配 145
9.3 基本正则表达式 146
9.3.1 字符组 146
9.3.2 可选字符 150
9.3.3 重复 151
9.4 分组 152
9.4.1 零分组 154
9.4.2 命名分组 155
9.4.3 引用已经存在的分组 156
9.5 先行断言 157
9.6 标记 158
9.6.1 不区分大小写 158
9.6.2 ASCII 与 Unicode 159
9.6.3 点匹配换行符 159
9.6.4 多行模式 159
9.6.5 详细模式 160
9.6.6 调试模式 160
9.6.7 使用多个标记 160
9.6.8 内联标记 160
9.7 替换 161
9.8 已编译的正则表达式 162
9.9 小结 163
第Ⅳ部分 其他高级主题
第10章 Python 2与Python 3 167
10.1 跨版本兼容性策略 167
10.1.1 __future__模块 168
10.1.2 2to3 168
10.1.3 限制 170
10.1.4 six 170
10.2 Python 3中的变更 171
10.2.1 字符串与Unicode 171
10.2.2 Print函数 171
10.2.3 除法 172
10.2.4 绝对与相对导入 173
10.2.5 老式风格类的移除 174
10.2.6 元类语法 175
10.2.7 异常语法 176
10.2.8 字典方法 178
10.2.9 函数方法 179
10.2.10 迭代器 179
10.3 标准库重定位 180
10.3.1 合并高效模块 180
10.3.2 URL模块 181
10.3.3 重命名 181
10.3.4 其他包重组 181
10.4 版本检测 182
10.5 小结 182
第11章 单元测试 183
11.1 测试的连续性 183
11.1.1 副本生态系统 183
11.1.2 隔离的环境 184
11.1.3 优点与缺点 185
11.2 测试代码 185
11.2.1 代码布局 186
11.2.2 测试函数 186
11.2.3 assert语句 188
11.3 单元测试框架 188
11.3.1 执行单元测试 189
11.3.2 载入测试 192
11.4 模拟 193
11.4.1 模拟函数调用 193
11.4.2 断言被模拟的调用 195
11.4.3 检查模拟 197
11.4.4 检查调用 199
11.5 其他测试工具 199
11.6 小结 201
第12章 CLI工具 203
12.1 optparse 203
12.1.1 一个简单的参数 203
12.1.2 选项 205
12.1.3 使用optparse的原因 212
12.2 argparse 213
12.2.1 本质 213
12.2.2 参数与选项 214
12.2.3 使用argparse的理由 220
12.3 小结 221
第13章 asyncio模块 223
13.1 事件循环 223
13.2 协程 227
13.3 Future对象与Task对象 229
13.3.1 Future对象 229
13.3.2 Task对象 230
13.4 回调 231
13.4.1 不保证成功 232
13.4.2 幕后 232
13.4.3 带参数的回调 233
13.5 任务聚合 233
13.5.1 聚集任务 234
13.5.2 等待任务 235
13.6 队列 238
13.7 服务器 240
13.8 小结 242
第14章 代码风格 243
14.1 原则 243
14.1.1 假定你的代码需要维护 243
14.1.2 保持一致性 244
14.1.3 考虑对象在程序中的存在方式,
尤其是那些带有数据的
对象 244
14.1.4 不要做重复工作 244
14.1.5 让注释讲故事 245
14.1.6 奥卡姆剃刀原则 245
14.2 标准 245
14.2.1 简洁的规则 246
14.2.2 文档字符串 246
14.2.3 空行 246
14.2.4 导入 247
14.2.5 变量 247
14.2.6 注释 248
14.2.7 行长度 248
14.3 小结 249
|
內容試閱:
|
最近,Python已经成为越来越多开发人员的首选语言。Python的使用者遍布全球,他们将该语言用于各种目的。随着Python的广泛应用,越来越多的开发人员都在花时间编写Python。Python稳定增长的原因在于它是一门强大的语言,但很多经验丰富的Python开发人员也仅仅了解该语言所能完成工作的冰山一角。本书读者对象本书的目标读者是那些已经使用Python工作并熟悉它,而且希望进一步学习的开发人员。本书假定读者已经完成过Python开发过程中的大多数基本任务例如使用过Python交互式终端。如果你是希望寻求由中级到高级的Python语言功能的读者,就应该从头至尾阅读本书。你也可能曾经使用过更高级的语言功能,或可能需要维护使用这些功能的代码,那么可以考虑将本书作为参考手册;或者处理具体实现代码时可以将本书作为索引,从而充实对高级功能的理解。本书内容本书涵盖所有最新版本的Python包括Python 2与Python 3。在编写本书时,最新的可用版本是Python 3.4,Python 3.5还是beta版。本书主要涵盖了Python 2.62.73.33.4。本书提供的大多数代码既能在Python 2上运行,也能在Python 3上运行,Python 2代码会特别标注出来。此外,本书还占用一整章的篇幅深入讲解Python 2与Python 3的区别,其中提供了编写跨版本运行代码的建议,以及如何将代码移植到Python 3。本书主要集中在两个领域。第一个领域是语言功能本身。例如,本书用几章阐述关于Python类与对象模型工作机制的多个方面。第二个领域是作为标准库的一部分提供的模块。例如,本书用3章阐述了3个模块:asyncio、unittest与argparse。本书结构本书可以分为4个部分:本书的前3章介绍Python中的函数。前两章分别阐述装饰器与上下文管理器,它们是用于修改或为增加功能封装函数的可重用方式。第3章则是关于生成器的内容,生成器是一种设计函数的方法,它可以使函数一次返回一个值,而不是提前创建一整列值并将其一次性返回。第Ⅱ部分包含第4~7章,介绍Python类与语言对象模型。第4章阐述魔术方法,第5章和第6章分别阐述元类和类工厂,这是以强大方式构建类的两种方式。最后,第7章阐述抽象基类,解释abc模块,以及如何让类来声明实现的模式。第Ⅲ部分包含第8章和第9章,介绍字符串与数据。第8章阐述如何在Python中使用Unicode字符串与使用字节字符串相比较,详细介绍了在Python 2与Python 3中字符串的区别。第9章则阐述正则表达式,包含了Python的re模块,以及如何编写正则表达式。最后,第Ⅳ部分包含无法融入前三部分的所有内容。第10章深入介绍Python 2与Python 3的区别,以及如何编写能够兼容这两个平台的代码。第11章介绍单元测试,主要关注unittest模块。关于命令行界面CLI工具的第12章介绍有关optparse与argparse的内容,这两个Python模块用于编写命令行工具。第13章介绍asyncio,它是一个新的异步编程库,在Python 3.4中被引入到Python标准库。第14章介绍代码风格。使用本书的前提条件首先,需要一台运行Python的计算机。虽然在大多数章节中没有区别,但本书在方法上稍微有点以Linux为中心在第12章区别最大。本书的示例在Linux环境中运行,如果在Windows环境中运行,输出结果可能会有略微不同。勘误表尽管我们已经尽了各种努力来保证书中或代码中不出现错误,但是人无完人,错误在所难免。如果发现本书中的错误,如拼写错误或代码错误,请告诉我们,我们将不胜感激。通过发送勘误表,可以让其他读者避免几个小时的困惑,同时可以帮助我们提供更高质量的信息。要在网站上找到本书的勘误表,请访问http:www.wrox.com网页,点击勘误表链接。在这个网页上,您能看到本书提供的和Wrox编辑发布的所有勘误表。如果在本书勘误页面上找不到提供的勘误表,请访问www.wrox.comcontact techsupport.shtml网页,填写那个网页上的表格并且发给我们您发现的错误。我们将核对反馈信息,如果正确,我们将在本书的勘误表页面张贴该错误消息,并在本书后续版本中修正这一问题。P2P.wrox.com要与作者和同行讨论,请加入p2p.wrox.com网站上的P2P论坛。这个论坛是一个基于Web的系统,可以张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供电子邮件订阅功能,当论坛上有新贴发布时,可以给你传送你选择的感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。在http:p2p.wrox.com上,你将发现许多不同的论坛,它们不仅有助于你阅读本书,而且还有助于你开发自己的应用程序。要加入论坛,可以遵循下面的步骤:1 进入p2p.wrox.com,单击Register链接。2 阅读使用协议,并单击Agree按钮。3 填写加入该论坛所需要的信息和自己希望提供的其他可选信息,单击Submit按钮。4 你会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。
加入论坛后,可以发布新消息和回复其他用户发布的信息。可以随时阅读这个网站上的信息。如果想收到特定论坛发来的新消息,单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。要想更多了解如何使用Wrox P2P的信息,一定要阅读FAQ,了解有关论坛软件的工作情况,以及P2P和Wrox图书的许多常见问题的解答。要阅读FAQ,只需要在任意P2P页面上单击FAQ链接即可。
2.3 何时应该编写上下文管理器
有几个编写上下文管理器的常见理由。一般来说,这些情况都涉及确保某种资源以一种期望的方式被初始化和反初始化,或尽力去避免重复。
2.3.1 资源清理
打开和关闭资源如文件或数据库连接是编写上下文管理器的重要因素之一。确保出现异常时正确关闭资源往往很重要,这样能够避免最终随着时间的推移而产生很多的僵尸进程。
上下文管理器的优势就在于此。通过在__enter__方法中打开资源并返回它,可以保证__enter__方法能执行,同时也能在异常出现之前关闭这个资源。
考虑下面这个打开PostgreSQL数据库连接的上下文管理器:
import psycopg2
class DBConnectionobject:
def __init__self, dbname=None, user=None,
password=None, host=''localhost'':
self.host = host
self.dbname = dbname
self.user = user
self.password = password
def __enter__self:
self.connection = psycopg2.connect
dbname=self.dbname,
host=self.host,
user=self.user,
password=self.password,
return self.connection.cursor
def __exit__self, exc_type, exc_instance, traceback:
self.connection.close
在上下文管理器中,可以针对数据库执行查询操作并检索结果。
with DBConnectionuser=''luke'', dbname=''foo'' as db:
... db.execute''SELECT 1 1''
... db.fetchall
...
[2,]
但是,只要上下文管理器存在,分配给db的数据库指针就会被关闭,然后再次查询也就无法成功。
with DBConnectionuser=''luke'', dbname=''foo'' as db:
... db.execute''SELECT 1 1''
... db.fetchall
...
[2,]
db.execute''SELECT 1 1''
Traceback most recent call last:
File "", line 1, in
psycopg2.InterfaceError: cursor already closed
这里发生了什么?上下文管理器创建了一个psycopg2连接对象并且返回另一个指针,开发人员可以使用该指针与数据库交互。尽管如此,当上下文管理器存在时,保证连接是处于关闭状态仍很重要。
如上所述,这一点很重要,因为占用数据库的连接不仅消耗内存,而且在应用主机和数据库主机上它们也会打开文件或端口。此外,有些数据库也有最大连接数的阈值。
还请注意,与之前的示例不同,这个上下文管理器不仅仅在__enter__方法的结尾返回自身,还返回一个数据库的指针。这个示例很有用,但它,执行的仍然是上下文管理器的__exit__方法。
大多数与数据库相关的框架都会处理数据库连接的打开或关闭操作,但原则依然是:如果打开一个资源,一定要确保正确地关闭它,此时上下文管理器是一个十分优秀的工具。
|
|