python cookbook(第3版)高清中文完整版.pdf

所需积分/C币:50 2017-09-01 21:30:42 4.84MB PDF
收藏 收藏
举报

python cookbook(第3版)高清中文完整版.pdf,作者: David Beazley, Brian K. Jones 译者: 熊能 版本: 第3版 出版社: O’Reilly Media, Inc. 出版日期: 2013年5月08日 Copyright © 2013 David Beazley and Brian Jones. All rights reserved.
结枃知识,算法复杂度,系统编程,并行,C语言编程等)。另外,每个示例都只是一个 入门指导,如果读者想深入研究,需要自已去查阅更多资料。因此,我们假定读者可以 很熟练的使用搜索引擎以及知道怎样查询在线的 Python文档。 这本书不适合 Python的初学者。事实上,本书已经假定了读者已经有了一定的 Python基 础,看完过几本入门书籍。本书也不是那种快速参考手册(可以很快的査询某个模块下的 某个函数)。本书旨在聚焦几个最重要的主题,演示几种可能的解决方案,作为一个跳 板,你可以经此进入一些更高级的主题,这些可以在网上或者参考手册中找到 本书示例代码 本书儿乎所有源代码均可以在http://github.com/dabeaz/python-cookbook上面找到。作 者欢迎各位修正bug,改进代码和评论。 本书就是帮助你完成你的工作。一般来讲,只要在本书上面的实例代码,你都可以随时 拿过去在你的源码和文档中使用。你不需要向我们申请许可,除非你抄袭的太过分了。 比如说复制几个代码片段去完成一个程序是不需要许可的,贩卖或者分发实例代码的光 盘也不需要许可,引用本书和实例代码去网上回答一个问题也不需要许可。但是,合并 大量的代码带你的正式产品或文档中去必须得到我们的许可。 我们不会要求你添加代码的出处,包括标题,作者,出版社,|SBN。比如: Python Cookbook, 3rd edition, by david Beazley and brian K Jones(o' reilly). Copyright 2013 David Beazley and brian Jones,978-1449-34037-7.但是如果你这么做了,我们会很感激 的 联系我们 请将关于本书的评论和问题发送给出版社: O Reilly media, Inc 1005 Gravenstein Highway north Sebastopol, Ca 95472 800-998-9938(in the United States or Canada) 707-829-0515( international or local) 707-829-0104(fax) 本书网站:http://oreil.ly/python_cookbook_3e上面有勘误表,示例和些其他信息 如果想要评论或者是问下本书技术方面的问题,请发送邮件至: bookquestions@oreilly.com 更多关于我们的书籍,讨论会,新闻,请访问我们的网站http://www.oreilly.com 在Facebook上查找我们http://facebook.com/oreilly 在Twitter上关注我们http://twitter.com/oreillymedia 在YouTube上观看我们http://www.youtube.com/oreillymedia 感谢 我们由衷的感谢本书的技术审核者 Jake vanderplas, Robert kern和 Andrea crottik的非常 有有用的评论和建议,还有 Python社区的帮助和鼓劢。我们还想感谢上一个版本的编辑 Jake vanderplas, Robert Kern, and andrea crotti。尽管这个版本是最新的,但是前一个版 本凵纤提供了一个感兴趣主题和解决方案的框架。最后,最最重要的就是,我们要感谢 所有预览版本的读者,他们的评论和改进意见对本书很有帮助。 第一章:数据结构和算法 Python提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些 数据结构是很简单的。但是,我们也会绎常碰到到诸如査询,排序和过滤等等这些普遍 存在的问题。因此,这一章的目的就是讨论这些比较常见的问题和算法。另外,我们也 会给出在集合模块co1 Lections当中操作这些数据结构的方法。 Contents: 1.1解压序列赋值给多个变量 问题 现在有个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变 量? 解决方案 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量。唯 一的前提就是变量的数量必须跟序列元素的数量是一样的。 代码示例: >>>p=(4,5) >>>X, >>>X 4 >>> >> >>>data=["ACME',59,91.1,(2012,12,21) >> name, shares, price, date data >> name ACME >>> date (2012,12,21) >>>name, shares, price,(year, mon, day )= data >> name ACME >> year 2012 >> mon 12 >>>da 21 >>> 如果变量个数和序列元素的个数不匹配,会产生一个异常。 代码示例: p=(4,5) >>>×,y Traceback ( most recent call last): File <stdin", line 1, in <module> Valueerror: need more than 2 values to unpack >>> 讨论 实际上,这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元组。包括 字符串,文件对象,迭代器和生成器。 代码示例 >>>s="He11o >>>a, b,c,d,e >>>a H >>>b e >>>e >>> 有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况 Python并没有提供特殊 的语法。但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了 代码示例: >>>data=["ACME',58,91.1,(2812,12,21)] >>> shares, price, data >>>shares 59 >> price 91.1 >>> 你必须保证你选用的那些占位变量名在其他地方没被使用到。 1.2解压可迭代对象赋值给多个变量 问题 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个Va1teRror。那么怎样才 能从这个可迭代对象中解压出N个元素出来? 解决方案 ythoη的星号表达式可以用米解决这个问题。比如,你在学习门课程,在学期末的时 候,你想统计下家庭作业的半均成绩,但是排除掉第一个和最后一个分数。如果只有四 个分数,你可能就直接去简单的手动赋值,但如果有24个呢?这时候星号表达式就派上 用场了: def drop first last(grades) first, *middle, last grades return avg(middle) 另外一种情况,假设你现在有一些用户的记录列表,每条记录包含一个名字、邮件,接着 就是不确定数量的电话号码。你可以像下面这样分解这些记录: >>>record=("Dave','dave@example.com',"773-555-1212,"847-555-1212) >>>name, email,*phone numbers record >> name Dave >> email dave(example. com >> phone_numbers ['773-555-1212,'847-555-1212] >>> 值得注意的是上面解压出的 phone_numbers变量永远都是列表类型,不管解压的电话号码 数量是多少(包括0个)。所以,任何使用到 phone_numbers变量的代码就不需要做多余的 类型检查去确认它是否是列表类型了。 星号表达式也能川在列表的开始部分。比如,你有一个公司前8个月销售数据的序列,但 是你想看下最近一个月数据和前面7个月的平均值的对比。你可以这样做: *trailing atrs, current gtr sales record trailing avg sum(trailing gtrs)/ len(trailingatrs) return avg comparison(trailing avg, current gtr) 下面是在 Python解释器中执行的结果 >>*tai1ing, current=[10,8,7,1,9,5,10,3] >>>trailing [10,8,7,1,9,5,18] >> current 讨论 扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象而设计的 通常,这些可迭代对象的元素结构有确定的规则(比如第1个元素后面都是电话号码), 星号表达式让开发人员可以很容易的利用这些规则来解压出元素来。而不是通过一些比 较复杂的手段去获取这些关联的的元素值。 值得注意的是,星号表达式在迭代元素为可变长元组的序列时是很有用的。比如,下面 是一个带有标签的元组序列 records (foo',1,2) bar,hello), def do foo(x, y) print( foo,x, y) def do bar(s) print( 'bar,s) for tag, args in records f tag foo do foo (args elif tag ==bar: do bar(kargs) 星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。 代码示例 >> line ='nobody: *:-2:-2: Unprivileged User: /var/empty: /usr/bin/false >>>uname, *fields, homedir, sh line split(: ' >> uname nobod >>> homedir /var/empty >>>sh /usr/bin/false 有时候,你想解压一些元素后丢弃它们,你不能简单就使用*,但是你可以使用一个普 通的废弃名称,比如或者gn。 代码示例 >>> record=("ACME',59,123.45,(12,18,2012) >> name y o year)= record >> name ACME >>> year 2012 >> 在很多函数式语言中,星号解压语法跟列表处理有许多相似之处。比如,如果你有一个列 表,你可以很容易的将它分割成前后两部分 >>> items=[1,10,7,4,5,9] >> head, *tail s items >>> head >>> tail [19,7,4,5,9] >> 如果你够聪明的话,还能用这种分割语法去巧妙的实现递归算法。比如: >>>def sum(items): head, *tail s items return head sum(tail) if tail else head >> sum(items) 36 >>> 然后,由于语言层面的限制,递归并不是 Python擅长的。因此,最后那个递归演示仅仅 是个好奇的探索罢了,对这个不要太认真了。 13保留最后N个元素 问题 在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案 保留有限历史记录正是co1 ections.deue显身手的时候。比如,下面的代码在多行上 面做简单的文本匹配,并只返回在前N行中匹配成功的行: from collections import deque def search(lines, pattern, history=5): previous lines deque(maxlen=history) for li in lines if pattern in li yield li, previous lines previous lines. append(li) #f ExampLe use on a file if name = main: with open(r',/./cookbook /somefile. txt')as f: for line, prevlines in search(f,python, 5): for p lne n p relines print(pline, end=) print(line, end=') print("-’*28) 寸论 我们在写查询元素的代码时,通常会使用包含yied表达式的生成器函数,也就是我们 上面示例代码中的那样。这样可以将搜索过程代码和使用搜索结果代码解耦。如果你还 不清楚什么是生成器,请参看4.3节。 使用 deque(max1en=N)构造函数会新建一个固定大小的队列。当新的元素加入并且这个队 列已满的时候,最老的元素会自动被移除掉。 代码示例: >>>q=deque (maxlen=3) >>>gappend (1) pend >>>qappend(2) >>>g append(3) >>>q deque([1, 2, 3], maxlen=3) >>>gappend(4) deque([2, 3, 4, maxlen=3) >>>gappend(5) >>> q deque([3, 4, 5], maxlen=3)

...展开详情
试读 127P python cookbook(第3版)高清中文完整版.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    一个资源只可评论一次,评论内容不能少于5个字
    绿色多摩川 一般般了,没有一个完整的版本
    2019-06-02
    回复
    sandmand 好像不错,再下载一次看看
    2019-05-07
    回复
    • 领英

      绑定领英第三方账户获取
    • GitHub

      绑定GitHub第三方账户获取
    • 脉脉勋章

      绑定脉脉第三方账户获得
    • 签到达人

      累计签到获取,不积跬步,无以至千里,继续坚持!
    • 分享宗师

      成功上传21个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    python cookbook(第3版)高清中文完整版.pdf 50积分/C币 立即下载
    1/127
    python cookbook(第3版)高清中文完整版.pdf第1页
    python cookbook(第3版)高清中文完整版.pdf第2页
    python cookbook(第3版)高清中文完整版.pdf第3页
    python cookbook(第3版)高清中文完整版.pdf第4页
    python cookbook(第3版)高清中文完整版.pdf第5页
    python cookbook(第3版)高清中文完整版.pdf第6页
    python cookbook(第3版)高清中文完整版.pdf第7页
    python cookbook(第3版)高清中文完整版.pdf第8页
    python cookbook(第3版)高清中文完整版.pdf第9页
    python cookbook(第3版)高清中文完整版.pdf第10页
    python cookbook(第3版)高清中文完整版.pdf第11页
    python cookbook(第3版)高清中文完整版.pdf第12页
    python cookbook(第3版)高清中文完整版.pdf第13页
    python cookbook(第3版)高清中文完整版.pdf第14页
    python cookbook(第3版)高清中文完整版.pdf第15页
    python cookbook(第3版)高清中文完整版.pdf第16页
    python cookbook(第3版)高清中文完整版.pdf第17页
    python cookbook(第3版)高清中文完整版.pdf第18页
    python cookbook(第3版)高清中文完整版.pdf第19页
    python cookbook(第3版)高清中文完整版.pdf第20页

    试读已结束,剩余107页未读...

    50积分/C币 立即下载 >