自2008年以来,我们已经目睹了整个Python世界正缓慢向着Python 3进化的事实。众所周知,完全接纳Python 3要花很长的时间。事实上,就在写作本书时(2013年),大多数Python程序员仍然坚持在生产环境中使用Python 2。关于Python 3不能向后兼容的事实也已经做了许多努力来补救。的确,向后兼容性对于任何已经存在的代码库来说是个问题。但是,如果你着眼于未来,你会发现Python 3带来的好处绝非那么简单。
正因为Python 3是着眼于未来的,本书在之前的版本上做了很大程度的修改。首先也是最重要的一点,这是一本积极拥抱Python 3的书。所有的章节都采用Python 3.3来编写并进行了验证,没有考虑老的Python版本或者“老式”的实现方式。事实上,许多章节都只适用于Python 3.3甚至更高的版本。这么做可能会有风险,但是最终的目的是要编写一本Python 3的秘籍,尽可能基于最先进的工具和惯用法。我们希望本书可以指导人们用Python 3编写新的代码,或者帮助开发人员将已有的代码升级到Python 3。
无需赘言,以这种风格来编写本书给编辑工作带来了一定的挑战。只要在网络上搜索一下Python秘籍,立刻就能在ActiveState的Python版块或者Stack Overflow这样的站点上找到数以千计的使用心得和秘籍。但是,大部分这类资源已经沉浸在历史和过去中了。由于这些心得和秘籍几乎完全是针对Python 2所写的,其中常常包含有各种针对Python不同版本(例如2.3版对比2.4版)之间差异的变通方法和技巧。此外,这些网上资源常常使用过时的技术,而这些技术现在成了Python 3.3的内建功能。想寻找专门针对Python 3的资源会比较困难。
本书并非搜寻特定于Python 3方面的秘籍将其汇集而成,本书的主题都是在创作中由现有的代码和技术而产生出的灵感。我们将这些思想作为跳板,尽可能采用最现代化的Python编程技术来写作,因此本书的内容完全是原创性的。对于任何希望以现代化的风格来编写代码的人,本书都可以作为参考手册。
在选择应该包含哪些章节时,我们有一个共识。那就是根本不可能编写一本涵盖了每种Python用途的书。因此,我们在主题上优先考虑Python语言核心方面的内容,以及能够广泛适用于各种应用领域的常见任务。此外,有许多秘籍是用来说明在Python 3中新增的功能,这对许多人来说比较陌生,甚至对于那些使用老版Python经验丰富的程序员也是如此。我们也会优先选择普遍适用的编程技术(即,编程模式)作为主题,而不会选择那些试图解决一个非常具体的实际问题但适用范围太窄的内容。尽管在部分章节中也提到了特定的第三方软件包,但本书绝大多数章节都只关注语言核心和标准库。
[第1章 数据结构和算法1.1 将序列分解为单独的变量](https://yq.aliyun.com/articles/94357/)1.1.1 问题1.1.2 解决方案1.1.3 讨论1.2 从任意长度的可迭代对象中分解元素1.2.1 问题1.2.2 解决方案1.2.3 讨论1.3 保存最后N个元素1.3.1 问题1.3.2 解决方案1.3.3 讨论1.4 找到最大或最小的N个元素1.4.1 问题1.4.2 解决方案1.4.3 讨论1.5 实现优先级队列1.5.1 问题1.5.2 解决方案1.5.3 讨论1.6 在字典中将键映射到多个值上1.6.1 问题1.6.2 解决方案1.6.3 讨论1.7 让字典保持有序1.7.1 问题1.7.2 解决方案1.7.3 讨论1.8 与字典有关的计算问题1.8.1 问题1.8.2 解决方案1.8.3 讨论1.9 在两个字典中寻找相同点1.9.1 问题1.9.2 解决方案1.9.3 讨论1.10 从序列中移除重复项且保持元素间顺序不变1.10.1 问题1.10.2 解决方案1.10.3 讨论1.11 对切片命名1.11.1 问题1.11.2 解决方案1.11.3 讨论1.12 找出序列中出现次数最多的元素1.12.1 问题1.12.2 解决方案1.12.3 讨论1.13 通过公共键对字典列表排序1.13.1 问题1.13.2 解决方案1.13.3 讨论1.14 对不原生支持比较操作的对象排序1.14.1 问题1.14.2 解决方案1.14.3 讨论1.15 根据字段将记录分组1.15.1 问题1.15.2 解决方案1.15.3 讨论1.16 筛选序列中的元素1.16.1 问题1.16.2 解决方案1.16.3 讨论1.17 从字典中提取子集1.17.1 问题1.17.2 解决方案1.17.3 讨论1.18 将名称映射到序列的元素中1.18.1 问题1.18.2 解决方案1.18.3 讨论1.19 同时对数据做转换和换算1.19.1 问题1.19.2 解决方案1.19.3 讨论1.20 将多个映射合并为单个映射1.20.1 问题1.20.2 解决方案1.20.3 讨论第2章 字符串和文本第3章 数字、日期和时间第4章 迭代器和生成器第5章 文件和I/O[第6章 数据编码与处理6.1 读写CSV数据](https://yq.aliyun.com/articles/94487/)6.1.1 问题6.1.2 解决方案6.1.3 讨论6.2 读写JSON数据6.2.1 问题6.2.2 解决方案6.2.3 讨论6.3 解析简单的XML文档6.3.1 问题6.3.2 解决方案6.3.3 讨论6.4 以增量方式解析大型XML文件6.4.1 问题6.4.2 解决方案6.4.3 讨论6.5 将字典转换为XML6.5.1 问题6.5.2 解决方案6.5.3 讨论6.6 解析、修改和重写XML6.6.1 问题6.6.2 解决方案6.6.3 讨论6.7 用命名空间来解析XML文档6.7.1 问题6.7.2 解决方案6.7.3 讨论6.8 同关系型数据库进行交互6.8.1 问题6.8.2 解决方案6.8.3 讨论6.9 编码和解码十六进制数字6.9.1 问题6.9.2 解决方案6.9.3 讨论6.10 Base64编码和解码6.10.1 问题6.10.2 解决方案6.10.3 讨论6.11 读写二进制结构的数组6.11.1 问题6.11.2 解决方案6.11.3 讨论6.12 读取嵌套型和大小可变的二进制结构6.12.1 问题6.12.2 解决方案6.12.3 讨论6.13 数据汇总和统计6.13.1 问题6.13.2 解决方案6.13.3 讨论第7章 函数第8章 类与对象第9章 元编程第10章 模块和包第11章 网络和Web编程第12章 并发第13章 实用脚本和系统管理第14章 测试、调试以及异常第15章 C语言扩展附录A 补充阅读
相关资源:敏捷开发V1.0.pptx