python cookbook(第3版)高清中文完整版(###).pdf
《python cookbook(第3版)高清中文完整版(###).pdf》由会员分享,可在线阅读,更多相关《python cookbook(第3版)高清中文完整版(###).pdf(702页珍藏版)》请在三一文库上搜索。
1、Docs python3-cookbook 1.0.0 文档 Python Cookbook 3rd Edition Documentation Contents: Copyright 书名: Python Cookbook3rd Edition 作者: David Beazley, Brian K. Jones 译者: 熊能 版本: 第3版 出版社: OReilly Media, Inc. 出版日期: 2013年5月08日 Copyright 2013 David Beazley and Brian Jones. All rights reserved. 更多发布信息请参考 http:/ 前
2、言 项目主页 https:/ 译者的话 人生苦短,我用Python! 译者一直坚持使用Python3,因为它代表了Python的未来。虽然向后兼容是它的硬伤,但 是这个局面迟早会改变的, 而且Python3的未来需要每个人的帮助和支持。 目前市面上 的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。 最近看到一本Python Cookbook3rd Edition,完全基于Python3,写的也很不错。 为 了Python3的普及,我也不自量力,想做点什么事情。于是乎,就有了翻译这本书的冲动 了! 这不是一项轻松的工作,却是一件值得做的工作:不仅方便了别人,而
3、且对自己翻 译能力也是一种锻炼和提升。 译者会坚持对自己每一句的翻译负责,力求高质量。但受能力限制,也难免有疏漏或者表 意不当的地方。 如果译文中有什么错漏的地方请大家见谅,也欢迎大家随时指正: 作者的话 自从2008年以来,Python3横空出世并慢慢进化。Python3的流行一直被认为需要很长一 段时间。 事实上,到我写这本书的2013年,绝大部分的Python程序员仍然在生产环境中 使用的是版本2系列, 最主要是因为Python3不向后兼容。毫无疑问,对于工作在遗留代 码上的每个程序员来讲,向后兼容是不得不考虑的问题。 但是放眼未来,你就会发现 Python3给你带来不一样的惊喜。 正
4、如Python3代表未来一样,新的Python Cookbook版本相比较之前的版本有了一个 全新的改变。 最重要的是,这个意味着本书是一本非常前沿的参考书。书中所有代码都 是在Python3.3版本下面编写和测试的, 并没有考虑之前老版本的兼容性,也没有标注旧 版本下的解决方案。这样子可能会有争议, 但是我们最终的目的是写一本完全基于最新 最先进工具和语言的书籍。 希望这本书能成为在Python3下编码和想升级之前遗留代码的 程序员的优秀教程。 毫无疑问,编写一本这样的书会冒一定的编辑风险。如果在网上搜索Python教程的话, 会搜到很多很多。 比如ActiveStates Python r
5、ecipes或者Stack Overflow,但是绝大部分都 已经是过时的了。 这些教程除了是基于Python2编写之外,可能还有很多解决方案在不同 的版本之间是不一样的(比如2.3和2.4版本)。 另外,它们还会经常使用一些过时的技术, 这些已经内置到Python3.3里面去了。寻找完全基于Python3的教程真的难上加难啊。 这本书的所有主题都是基于已经存在的代码和技术,而不是专门去寻找Python3特有的教 程。 在原有代码基础上,我们完全使用最新的Python技术去改造。 所以,任何想使用最 新技术编写代码的程序员,都可以将本书当做一本很好的参考书籍。 在讨论的主题选择方面,我们不可能
6、囊括Python领域所有的东西。 因此,我们优先选择 了Python语言核心部分,以及一些在开发中常见的问题和任务。 另外,这里讨论的很多 技术都是Python 3最新才出现的,所以如果工作在Python老版本下, 即便是最有经验的 程序员可能之前也没见过这些东西。 另外,这些示例程序也会偏向于展示一些有用的编 程技术(比如设计模式), 而不是仅仅定位在一些具体的问题上。尽管也提及到了有一些第 三方包,但是本书主要定位在Python语言核心和标准库。 这本书适合谁 这本书的目标读者是那些想深入理解Python语言机制和最新编程技能的资深程序员。 很 多讨论都是标准库,框架和应用程序使用到的高级
7、技术。 本书所有示例均假设读者已经 有了一定的编程背景并且可以很容易的读懂相关主题 (比如基本的计算机科学知识,数据 结构知识,算法复杂度,系统编程,并行,C语言编程等)。 另外,每个示例都只是一个 入门指导,如果读者想深入研究,需要自己去查阅更多资料。 因此,我们假定读者可以 很熟练的使用搜索引擎以及知道怎样查询在线的Python文档。 这本书不适合Python的初学者。事实上,本书已经假定了读者已经有了一定的Python基 础,看完过几本入门书籍。 本书也不是那种快速参考手册(可以很快的查询某个模块下的 某个函数)。 本书旨在聚焦几个最重要的主题,演示几种可能的解决方案,作为一个跳 板,
8、你可以经此进入一些更高级的主题,这些可以在网上或者参考手册中找到。 本书示例代码 本书几乎所有源代码均可以在 http:/ 上面找到。 作 者欢迎各位修正bug,改进代码和评论。 本书就是帮助你完成你的工作。一般来讲,只要在本书上面的实例代码, 你都可以随时 拿过去在你的源码和文档中使用。你不需要向我们申请许可, 除非你抄袭的太过分了。 比如说复制几个代码片段去完成一个程序是不需要许可的, 贩卖或者分发实例代码的光 盘也不需要许可,引用本书和实例代码去网上回答一个问题也不需要许可。 但是,合并 大量的代码带你的正式产品或文档中去必须得到我们的许可。 我们不会要求你添加代码的出处,包括标题,作者
9、,出版社,ISBN。 比如:Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (OReilly). Copyright 2013 David Beazley and Brian Jones, 978-1-449-34037-7. 但是如果你这么做了,我们会很感激 的。 联系我们 请将关于本书的评论和问题发送给出版社: OReilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United
10、 States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax) 本书网站: http:/oreil.ly/python_cookbook_3e ,上面有勘误表,示例和一些其他信息。 如果想要评论或者是问一下本书技术方面的问题, 请发送邮件至: 更多关于我们的书籍,讨论会,新闻, 请访问我们的网站: http:/ 在Facebook上查找我们: http:/ 在Twitter上关注我们: http:/ 在YouTube上观看我们: http:/ 感谢 我们由衷的感谢本书的技术审核者Jake Vanderpl
11、as, Robert Kern 和 Andrea Crotti的非常 有有用的评论和建议, 还有Python社区的帮助和鼓励。我们还想感谢上一个版本的编辑 Jake Vanderplas, Robert Kern,and Andrea Crotti。 尽管这个版本是最新的,但是前一个版 本已经提供了一个感兴趣主题和解决方案的框架。 最后,最最重要的就是,我们要感谢 所有预览版本的读者,他们的评论和改进意见对本书很有帮助。 第一章:数据结构和算法 Python提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些 数据结构是很简单的。 但是,我们也会经常碰到到诸如查询,排序和过滤
12、等等这些普遍 存在的问题。 因此,这一章的目的就是讨论这些比较常见的问题和算法。 另外,我们也 会给出在集合模块 c o l l e c t i o n s 当中操作这些数据结构的方法。 Contents: 1.1 解压序列赋值给多个变量 问题 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变 量? 解决方案 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量。 唯 一的前提就是变量的数量必须跟序列元素的数量是一样的。 代码示例: p = ( 4 , 5 ) x , y = p x 4 y 5 d a t a = A C M E , 5
13、0 , 9 1 . 1 , ( 2 0 1 2 , 1 2 , 2 1 ) n a m e , s h a r e s , p r i c e , d a t e = d a t a n a m e A C M E d a t e ( 2 0 1 2 , 1 2 , 2 1 ) n a m e , s h a r e s , p r i c e , ( y e a r , m o n , d a y ) = d a t a n a m e A C M E y e a r 2 0 1 2 m o n 1 2 d a y 2 1 如果变量个数和序列元素的个数不匹配,会产生一个异常。 代码示例: p
14、 = ( 4 , 5 ) x , y , z = p T r a c e b a c k ( m o s t r e c e n t c a l l l a s t ) : F i l e “ “ , l i n e 1 , i n V a l u e E r r o r : n e e d m o r e t h a n 2 v a l u e s t o u n p a c k 讨论 实际上,这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元组。 包括 字符串,文件对象,迭代器和生成器。 代码示例: 欢迎加入非盈利Py t h o n 学习交流编程QQ群783462347,群里免
15、费提供500+本Py t h o n 书籍! s = H e l l o a , b , c , d , e = s a H b e e o 有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况Python并没有提供特殊 的语法。 但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。 代码示例: d a t a = A C M E , 5 0 , 9 1 . 1 , ( 2 0 1 2 , 1 2 , 2 1 ) _ , s h a r e s , p r i c e , _ = d a t a s h a r e s 5 0 p r i c e 9 1 . 1 你必须保证你选用的那
16、些占位变量名在其他地方没被使用到。 1.2 解压可迭代对象赋值给多个变量 问题 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 V a l u e E r r o r 。 那么怎样才 能从这个可迭代对象中解压出N个元素出来? 解决方案 Python的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时 候, 你想统计下家庭作业的平均成绩,但是排除掉第一个和最后一个分数。如果只有四 个分数,你可能就直接去简单的手动赋值, 但如果有24个呢?这时候星号表达式就派上 用场了: 欢迎加入非盈利Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py
17、 t h o n 书籍! d e f d r o p _ f i r s t _ l a s t ( g r a d e s ) : f i r s t , * m i d d l e , l a s t = g r a d e s r e t u r n a v g ( m i d d l e ) 另外一种情况,假设你现在有一些用户的记录列表,每条记录包含一个名字、邮件,接着 就是不确定数量的电话号码。 你可以像下面这样分解这些记录: r e c o r d = ( D a v e , d a v e e x a m p l e . c o m , 7 7 3 - 5 5 5 - 1 2 1
18、 2 , 8 4 7 - 5 5 5 - 1 2 1 2 ) n a m e , e m a i l , * p h o n e _ n u m b e r s = r e c o r d n a m e D a v e e m a i l d a v e e x a m p l e . c o m p h o n e _ n u m b e r s 7 7 3 - 5 5 5 - 1 2 1 2 , 8 4 7 - 5 5 5 - 1 2 1 2 值得注意的是上面解压出的 p h o n e _ n u m b e r s 变量永远都是列表类型,不管解压的电话号码 数量是多少(包括0个)。
19、所以,任何使用到 p h o n e _ n u m b e r s 变量的代码就不需要做多余的 类型检查去确认它是否是列表类型了。 星号表达式也能用在列表的开始部分。比如,你有一个公司前8个月销售数据的序列, 但 是你想看下最近一个月数据和前面7个月的平均值的对比。你可以这样做: * t r a i l i n g _ q t r s , c u r r e n t _ q t r = s a l e s _ r e c o r d t r a i l i n g _ a v g = s u m ( t r a i l i n g _ q t r s ) / l e n ( t r a i
20、l i n g _ q t r s ) r e t u r n a v g _ c o m p a r i s o n ( t r a i l i n g _ a v g , c u r r e n t _ q t r ) 下面是在Python解释器中执行的结果: * t r a i l i n g , c u r r e n t = 1 0 , 8 , 7 , 1 , 9 , 5 , 1 0 , 3 t r a i l i n g 1 0 , 8 , 7 , 1 , 9 , 5 , 1 0 c u r r e n t 3 讨论 欢迎加入非盈利Py t h o n 学习交流编程QQ群78346
21、2347,群里免费提供500+本Py t h o n 书籍! 扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象而设计的。 通常,这些可迭代对象的元素结构有确定的规则(比如第1个元素后面都是电话号码), 星号表达式让开发人员可以很容易的利用这些规则来解压出元素来。 而不是通过一些比 较复杂的手段去获取这些关联的的元素值。 值得注意的是,星号表达式在迭代元素为可变长元组的序列时是很有用的。 比如,下面 是一个带有标签的元组序列: r e c o r d s = ( f o o , 1 , 2 ) , ( b a r , h e l l o ) , ( f o o , 3 , 4
22、) , d e f d o _ f o o ( x , y ) : p r i n t ( f o o , x , y ) d e f d o _ b a r ( s ) : p r i n t ( b a r , s ) f o r t a g , * a r g s i n r e c o r d s : i f t a g = = f o o : d o _ f o o ( * a r g s ) e l i f t a g = = b a r : d o _ b a r ( * a r g s ) 星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。 代码示例: l i n e
23、 = n o b o d y : * : - 2 : - 2 : U n p r i v i l e g e d U s e r : / v a r / e m p t y : / u s r / b i n / f a l s e u n a m e , * f i e l d s , h o m e d i r , s h = l i n e . s p l i t ( : ) u n a m e n o b o d y h o m e d i r / v a r / e m p t y s h / u s r / b i n / f a l s e 有时候,你想解压一些元素后丢弃它们,你
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python cookbook第3版高清中文完整版# cookbook 中文 完整版
链接地址:https://www.31doc.com/p-5529956.html