`
javayestome
  • 浏览: 1050388 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

<Dive into Python>大补贴(1)

阅读更多

<Dive into Python>大补贴

作者:赖勇浩

前言

前几日发了一篇<为什么<Dive into Python>不值得推荐>的贴子,有朋友指出这本书虽然不适合初学者,但里面的一些内容还是可以当作提高篇的,最大的问题也许在于它基于老版本的 Python,并提出给 DIP 打补丁的想法。我觉得打补丁的想法还是很有意义的,而我也正好想宣传一下 Python 的新特性,所以决定写这 DIP 大补贴这样的系列文章,狗尾续貂,还请大家多多指教。

这一份补丁基于官网中文版5.4b(http://www.woodpecker.org.cn/diveintopython)的第二章至第六章,更新 DIP 的内容到适合 Python2.5 版本,涉及的特性有较大一部分必须2.5版本才能应用。

本文假定读者已经掌握 Python 的语法和常用模块,完全不懂 Python 者不是作者的预期读者,请先读 Tutorial。

另,本文会提到 Python3.0 版本的一些变化,但不会深入讨论 3.0 特性,只是告诉大家这东西已经变了样儿啦。想在这方面了解更多,请阅读 Python3.0 的在线文档。

第一贴

在第2章第一节(http://www.woodpecker.org.cn/diveintopython/getting_to_know_python/index.html)的例2.1 更新以后的代码为:

def buildConnectionString(params):

"""Build a connection string from a dictionary of parameters.

Returns string."""

return ";".join("%s=%s" % (k, v) for k, v in params.iteritems())

if __name__ == "__main__":

myParams = {"server":"mpilgrim",

"database":"master",

"uid":"sa",

"pwd":"secret"

}

print buildConnectionString(myParams)

改变有三个:

一、去除了定义 myParams 时的续行符;

二、去除了 join() 实参中的临时列表,使用生成器表达式;

三、字典的 items() 函数改为 iteritems()。

下面具体来讲讲这三个新特性。

续行规则

Python 的续行规则分为两种:显式续行和隐式续行。显式即 DIP 中的在物理行结束符前加续行符表示下一行与本行是处于同一逻辑行。显式有两个缺点,一是加入续行符让代码看起来比较丑陋,不够 Pythonic;二是续行符后面必须是换行符,无法在同一行添加行注释。

隐式续行完美地解决了这两个问题,除了一个限制:隐式换行只可以出现在圆括号、方括号和花括号之间。简单来说,就是我们只有在定义函数、调用函数、定义元组、列表和字典时使用隐式续行,如:

>>> def foo(a, # 这是一个行注释,显式续行做不到哦~

... b):

... print a, b

...

>>> foo(100,

... 10)

100 10

>>> atuple = (1, 2, 3,

... 4, 5, 6)

>>> alist = [1, 2, 3,

... 4, 5, 6]

>>> adict = {'abc' : 1,

... 'def' : 2}

隐式续行在 from ... import ... 语句中也能发挥重要作用:

>>> from os.path import (isfile, isdir,

...islink, ismount)

生成器表达式(Genetaor Expression)

原文使用的”["%s=%s" % (k, v) for k, v in params.items()]”称为list comprehension(译为列表包含或列表理解的都有,因为统一,本文使用英文),改为生成器表达式是为了提升性能,优化内存的使用。生成器表达式是用来生成函数调用时序列参数的一种迭代器写法,在语法上跟 list comprehension 差不多,不过把方括号换成了圆括号,如:

>>> i = (i for i in xrange(10))

大家千万别以为 i 是一个元组,其实它是一个生成器对象:

>>> i

<generator object at 0x830b<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="32" unitname="C" w:st="on">32c</chmetcnv>><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<generator object at></generator>

生成器对象可以遍历或转化为列表(或元组等数据结构),但不能切片(slicing)。当函数的唯一的实参是可迭代序列时,便可以去掉生成器表达式两端的圆括号,写出更优雅的代码:

>>> sum(i for i in xrange(10))

45

需要注意的是函数接受多个实参时,必须加上圆括号:

>>> map(str, (i for i in xrange(10)))

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

dict 的迭代遍历

随着 Python 的发展,迭代器理念在社区中深得人心,语言也源源不断地增加新特性来支持它。作为最常用的数据结构之一,dict 提供内置的迭代遍历方法是必然的。调用dict.items()函数族(包括dict.keys()和dict.values())都返回实实在在的列表对象,这在遍历元素众多的 dict 对象时往往会引起垃圾收集机制动行,导致性能下降。

现代 Python 改造了 dict,为它增加了 iteritems() 函数族(包括 dict.iterkeys() 和 dict.itervalues())。它们的返回值是一个迭代器对象,而非占用大量内存的列表对象,这一特性使得基于 dict 的迭代更加高效。

类似的机制还有 xrange 对象、file.xreadlines() 等。值得一提的是 dict 和 file 提供更简洁的方式进行迭代遍历:

>>> for key in adict:

... do_something_with(key)

>>> for line in file_obj:

... do_something_with(line)

这里的 adict、file_obj 与 adict.iterkeys()、file_obj.xreadlines()有相同的效果,但显得更为 Pythonic,是推荐写法。

Python3.0

dict 的 iteritems() 函数族也好,xrange()也罢,在 Py3.0 里都改头换面了。Py3.0 是更彻底的基于迭代器编程的语言,dict 的 items() 函数族直接返回迭代器,就是说它的行为跟 Py2.x 的 iteritems() 函数族是一样的;而 iteritems() 函数族则直接“消失”了。类似的还有 range() 返回生成器,file.readlines() 返回迭代器;去除了 xrange() 内置函数和 file.xreadlines() 方法。

分享到:
评论

相关推荐

    dive into python3 (中文版)

    Python是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能而闻名。《深入Python3(中文版)》是一本系统介绍Python 3的书籍,旨在帮助读者深入学习Python 3的基本知识与应用。本文将根据给定文件的信息...

    《Dive Into Python 3中文版》PDF

    《Dive Into Python 3中文版》是一本深入学习Python 3编程语言的教程,适合初学者和有一定编程基础的开发者。这本书详细介绍了Python 3的各种特性,包括语法、数据结构、函数、类、模块、异常处理、输入/输出、网络...

    Dive into Python3

    《Dive into Python3》的压缩包文件名为diveintopython3-r860-2010-01-13,这可能表示它是2010年1月13日发布的第860个修订版。这个版本可能包含了作者对初版的修正和更新,以适应Python 3的最新发展。 通过阅读这...

    Dive Into Python 中文译文版

    PDF版本的《Dive Into Python 中文译文版》(diveintopython-pdfzh-cn-5.4b.zip)提供了完整的书籍内容,涵盖了Python的基础知识到高级特性。书中通过实际案例引导读者深入学习,包括但不限于变量、数据类型、控制...

    dive into python(中文版)

    - **在线地址**:本书可通过官方网址http://diveintopython.org/(英文原版)及http://www.woodpecker.org.cn/diveintopython(中文版)获取。 - **版本更新**:建议通过官方渠道获取最新版本,确保内容的准确性和...

    深入Python (Dive Into Python)

    深入python,深入Python (Dive Into Python) 译者序 by limodou 主页(http://phprecord.126.com) Python论坛 本书英文名字为《Dive Into Python》,其发布遵守 GNU 的自由文档许可证(Free Document Lience)的...

    DiveIntoPython

    《Dive Into Python》是一本深受编程初学者和有经验开发者喜爱的Python编程教程。这本书以其深入浅出的讲解方式,让学习者能够快速掌握Python编程语言的核心概念和实际应用,特别是对于想要涉足Web开发领域的读者,...

    dive-into-python3 (英文版)+深入python3(中文版)

    《Dive Into Python3》和《深入Python3》是两本深受Python爱好者欢迎的书籍,分别提供了英文和中文的学习资源,旨在帮助读者全面理解和掌握Python3编程语言。这两本书覆盖了Python3的基础语法、高级特性以及实际应用...

    Dive Into Python 3

    《深入Python 3》是一本全面且深入介绍Python 3编程语言的电子书籍,旨在帮助读者从...压缩包中的文件“diveintomark-diveintopython3-793871b”很可能是该书的源代码或HTML文件,可以配合阅读,加深对书中示例的理解。

    Dive Into Python 2 中文版

    《Dive Into Python 2 中文版》是一本深度探讨Python编程语言的教程,适合已经有一定编程基础,希望深入理解Python特性和应用的读者。这本书以其详尽的解释和丰富的实例,为Python初学者和进阶者提供了全面的学习...

    Dive into python

    dive into python英文原版,Dive Into Python 3 covers Python 3 and its differences from Python 2. Compared to Dive Into Python, it’s about 20% revised and 80% new material. The book is now complete, ...

    diveintopython3

    在“diveintopython3-master”这个压缩包中,包含了这本书的所有源代码示例。通过这些代码,我们可以学习到以下关键知识点: 1. **Python基础**:包括变量、数据类型(如整型、浮点型、字符串、列表、元组、字典)...

    Dive Into Python 3, r870 (2010).pdf

    Didyoureadtheoriginal“DiveIntoPython”?Didyoubuyit onpaper?(Ifso,thanks!)AreyoureadytotaketheplungeintoPython3?…Ifso,readon.(Ifnoneofthat istrue,you’dbebetteroffstartingatthebeginning.) Python3...

    Dive Into Python 3 无水印pdf

    Dive Into Python 3 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Dive Into Python V5.4

    《Dive Into Python V5.4》是一本深入学习Python编程语言的经典教程,以其详尽的解释和丰富的实例深受程序员们的喜爱。这个版本是官方提供的最新版本,它不仅包含了PDF格式的完整书籍,还附带了书中所有示例代码,为...

    Dive Into Python 3 中文版

    ### Dive Into Python 3 中文版 - 安装Python 3 #### 标题解析 - **Dive Into Python 3 中文版**:这本书名表明了内容将深入讲解Python 3的各项特性和使用方法,适合希望深入了解Python 3编程语言的读者。 #### ...

    Dive Into Python 3 examples

    《Dive Into Python 3》是一本非常经典的Python编程教程,尤其适合初学者和有一定基础的程序员深入学习Python 3语言。这本书通过大量的实例来解释Python 3的关键概念和技术,帮助读者逐步掌握Python 3的核心知识。...

Global site tag (gtag.js) - Google Analytics