RSS获取点

学习python 第四版

其实已经不是Python的纯新手了,之前赶项目的时候用过python,由于时间比较急,所以就挑了一本不怎么样的书大致看了一下,本来想做完就扔掉的,没想到通过这个项目我却迷上了这个动人的语言,所以就找了这本饱受好评的learning python来看了。最新的第四版,暂无中文版,我就自行翻译了。英语未过6级,语文也不好,结果估计会比较悲剧,看官们请不要介意啊。

为了兼顾保留原文和阅读流畅性,我将en文部分设为了白色,如果需要查看请用鼠标选中。

原书名:Learning Python 4th Edition

作者:Mark Lutz

翻译者:Banum

前言

This book provides an introduction to the Python programming language. Python is a popular open source programming language used for both standalone programs and scripting applications in a wide variety of domains. It is free, portable, powerful, and remarkably easy and fun to use. Programmers from every corner of the software in-dustry have found Python’s focus on developer productivity and software quality to be a strategic advantage in projects both large and small.

这本书介绍了Python这种编程语言。 Python是一种在独立程序和脚本领域广泛使用的开源语言。它是免费、轻量、功能强大的,它非常容易使用同时充满了乐趣。来自软件业各个角落的程序员们发现无论项目大小,Python都能着眼于在软件生产率和软件质量两个方面,获得巨大的战略优势。

Whether you are new to programming or are a professional developer, this book’s goal is to bring you quickly up to speed on the fundamentals of the core Python language. After reading this book, you will know enough about Python to apply it in whatever application domains you choose to explore.

无论你是编程菜鸟还是专家,这本书的目标就是带你在Python核心编程基础上获得快速提升。读完这本书,你就能够对Python有一个足够的了解,使它适用于每一个你选择探索的应用领域。

By design, this book is a tutorial that focuses on the core Python language itself, rather than specific applications of it. As such, it’s intended to serve as the first in a two-volume set:

  • Learning Python, this book, teaches Python itself.
  • Programming Python, among others, shows what you can do with Python after you’ve learned it.

在设计时,这本书被定位为一本重点讲述核心Python编程本身的教程,而不是着眼于特定的应用领域。所以,这本书的目标是成为下面两类中的前者:

  • 《学习Python》,也就是这本书,教授Python本身。
  • 《Python编程》,其他那些中的一本,展现你学习了Python以后可以做什么。

That is, applications-focused books such as Programming Python pick up where this book leaves off, exploring Python’s role in common domains such as the Web, graphical user interfaces (GUIs), and databases. In addition, the book Python Pocket Reference provides additional reference materials not included here, and it is designed to supplement this book.

即,重点于应用的书(比如《Python编程》)应该在这本书读完后拿来继续研习,用以探索Python在Web、图形用户界面(GUI)以及数据库等常规领域的角色。此外,《Python袖珍参考书》这本书所提供的额外的参考材料本书也没有涉及,它被设计为对本书的另外一种支持。

Because of this book’s foundations focus, though, it is able to present Python fundamentals with more depth than many programmers see when first learning the language. And because it’s based upon a three-day Python training class with quizzes and exercises throughout, this book serves as a self-paced introduction to the language.

正因为这本书的基础目标(尽管第一次学习一种语言我们可以学得比很多程序员所看到得更深入),也因为这本书是在为其3天的带有练习和测试的Python教学课的难度基础上,这本书将会以适合自学的方式来介绍这种语言。

关于第四版

This fourth edition of this book has changed in three ways. This edition:

  • Covers both Python 3.0 and Python 2.6—it emphasizes 3.0, but notes differences in 2.6
  • Includes a set of new chapters mainly targeted at advanced core-language topics
  • Reorganizes some existing material and expands it with new examples for clarity

第四版在3个方面进行了改变:

  • 覆盖Python3.0以及Python2.6——强调3.0的特性,但会标注在2.6中的区别
  • 增加了一系列新的章节,这些章节主要针对于最新的核心编程主题
  • 整理了已存在的材料,同时为了更清晰的阐述扩充一些新的例子

As I write this edition in 2009, Python comes in two flavorversion 3.0 is an emerging and incompatible mutation of the language, and 2.6 retains backward compatibility with the vast body of existing Python code. Although Python 3 is viewed as the future of Python, Python 2 is still widely used and will be supported in parallel with Python 3 for years to come. While 3.0 is largely the same language, it runs almost no code written for prior releases (the mutation of print from statement to function alone, aesthetically sound as it may be, breaks nearly every Python program ever written).

当我在2009年开始写这个版本时,Python出现了两种版本,3.0是一种新出现的和以前的版本显得不兼容,而2.6则和现有的Python主体保持了兼容性。尽管Python3被视为是未来的Python,但是Python2依然被广泛地使用并且与Python3一起在接下来的几年获得支持。虽然3.0大致上还是那个Python,但是过去发布的Python大多是无法运行的(打印从申明变成了函数形式,虽然它可能变得更美观,但是这使得几乎所有的Python程序都被弄坏了。)

This split presents a bit of a dilemma for both programmers and book authors. While it would be easier for a book to pretend that Python 2 never existed and cover 3 only, this would not address the needs of the large Python user base that exists today. A vast amount of existing code was written for Python 2, and it won’t be going away any time soon. And while newcomers to the language can focus on Python 3, anyone who must use code written in the past needs to keep one foot in the Python 2 world today. Since it may be years before all third-party libraries and extensions are ported to Python 3, this fork might not be entirely temporary.

这种版本划分使得无论是程序员还是书的作者都很难办。如果假装Python2从来没有存在过,而只写3的特性,这会使成书工作显得比较容易,但是这样做却无法满足今天已经存在的巨大的Python使用者群体的需要。大量的程序都是用Python2写就,并且在短期内并不会更新或者遗弃。然而新的语言学习者就可以将重点放在Python3上,那些依然需要使用Python2的代码书写方式进行工作的人则必须时刻关注Python2的动向。因为第三方库和扩展完全支持python3尚需要一定的年限,所以这样的一种状况恐怕不会是暂时的。

涵盖Python2.6和3.0

To address this dichotomy and to meet the needs of all potential readers, this edition of this book has been updated to cover both Python 3.0 and Python 2.6 (and later releases in the 3.X and 2.X lines). It’s intended for programmers using Python 2, programmers using Python 3, and programmers stuck somewhere between the two.

注意到这两种版本的存在,为了满足所有潜在读者的需要,这版图书将升级为同时涵盖Python3.0和Python2.6。这样做即方便那些正在使用Python2的程序员,也考虑使用Python3的程序员,同时顾及那些两版本都需要的程序员。

That is, you can use this book to learn either Python line. Although the focus here is on 3.0 primarily, 2.6 differences and tools are also noted along the way for programmers using older code. While the two versions are largely the same, they diverge in some important ways, and I’ll point these out along the way.

也就是说你可以通过这本书学习任何一个版本的Python。虽然这本书的重点在于Python3.0,但是它和2.6的区别以及工具也会按照使用旧版本代码的程序员习惯提及。两个版本基本上是相同的,在重要的区别点上,我会给读者指出来。

For instance, I’ll use 3.0 print calls in most examples, but will describe the 2.6 print statement, too, so you can make sense of earlier code. I’ll also freely introduce new features, such as the nonlocal statement in 3.0 and the string format method in 2.6 and 3.0, and will point out when such extensions are not present in older Pythons.

举例来说,我会在大多数的示例中使用3.0的print方法,但也会对2.6的print声明进行描述,这样你就可以了解前一个版本的代码风格。我同时也会介绍一些新的功能,比如说全局变量在3.0中的声明以及2.6与3.0的字符串格式化方法,并且当一些扩展在早期版本的Python不存在时我也会告知大家。

If you are learning Python for the first time and don’t need to use any legacy code, I encourage you to begin with Python 3.0; it cleans up some longstanding warts in the language, while retaining all the original core ideas and adding some nice new tools.Many popular Python libraries and tools will likely be available for Python 3.0 by the time you read these words, especially given the file I/O performance improvements expected in the upcoming 3.1 release. If you are using a system based on Python 2.X, however, you’ll find that this book addresses your concerns, too, and will help you migrate to 3.0 in the future.

如果你是Python的新手,那么就不需要使用那些遗留代码了,强烈建议你从3.0开始;新版本清除了那些存在了很久的问题,同时保留了原始的核心思想,增加了许多新的工具。大多数流行的Python库在你读到这本书时也将支持3.0版本,特别是3.1版本中将要发布的文件I/O性能的提升,这些都让人欢欣鼓舞。如果你还在使用一个基于2.X版本的Python,没关系,这本书也值得一读,他将帮助你在未来迁移到3.0。

By proxy, this edition addresses other Python version 2 and 3 releases as well, though some older version 2.X code may not be able to run all the examples here. Although class decorators are available in both Python 2.6 and 3.0, for example, you cannot use them in an older Python 2.X that did not yet have this feature. See Tables P-1 and P-2 later in this Preface for summaries of 2.6 and 3.0 changes.

通过代理,这个版本提及了Python2和3的其他发行版本,尽管书中的例子大多无法再更久版本的2.X中运行。举例来说,Python2.6和3.0中的类装饰符,你在更老的2.X中使用它们,因为它们是新的特性。前言后面的表P-1和P-2将描述2.6和3.0中的这些变化。

Shortly before going to press, this book was also augmented with notes about prominent extensions in the upcoming Python 3.1 release–comma separators and automatic field numbering in string format method calls, multiple context manager syntax in with statements, new methods for numbers, and so on. Because Python 3.1 was targeted primarily at optimization, this book applies directly to this new release as well. In fact, because Python 3.1 supersedes 3.0, and because the latest Python is usually the best Python to fetch and use anyhow, in this book the term “Python 3.0” generally refers to the language variations introduced by Python 3.0 but that are present in the entire 3.X line.

就在出版的前不久,我们又根据即将到来的Python3.1的重要扩展通过注释对本书进行了加强——这包括字符串格式化方法调用中的逗号分割和自动区域编号,通过声明的多上下文管理器语法,新的数字方法等。因为Python3.1的目标在于优化,所以这本书也直接适用于新的版本。事实上,因为3.1会取代3.0,也因为最新的Python通常也是最适用获取和使用的Python,所以在这本书中,术语“Python3.0”通常是指3.0版本中所引入的语言变化,但同时也适用于整个3.X系列。就在译者翻译这篇文章的时候python3.2也已经发布了。

"学习python 第四版"by banum2010-7-31 at 4:46 下午no CommentsTags: , ,

我也来谈谈“腾讯qq空间失败的理由”

今天看到了Kai Lukoff的一篇帖子的翻译。说的是腾讯qq空间失败的3个理由。归结起来,有:

  1. 错失良机
  2. 差劲的站点设计与功能
  3. qq空间并非真正的No.1

同译者一样,本人也认为这位老外的观点略有偏颇,过于刻薄,但也不乏冷静的分析,部分地方写得一针见血。且不说qq空间是否失败这个问题,但是这一点毋庸置疑,qq空间不算成功。相比人人和开心,qq空间总是逊了别人一大截。

Lukoff提到qq依靠其巨大的用户群体,所以即使qq空间的服务实在够烂但依然能够盛行于世。这一点我非常赞同,而这句话的前半句,不就是众多中国互联网创业者最害怕腾讯插足的原因之一么?

对于Lukoff说的第一个原因,我不得不说自己的观点,其实腾讯的众多服务都有一个特点,他们总是不是第一个登陆中国的该类服务。qq空间前有人人网(facebook被天朝咔嚓了),qq的拍拍前有淘宝。就连qq本身,在他之前也已经有icq了(当然这个非本国,但在互联网初期他在国内的确有一定的市场占有率)。在这样的一个大好惯例下,腾讯就永远坐着千年老二(通常还是山寨老二),而且坐得很稳,坐得很爽。所以腾讯的错失良机是有优良传统的。正因为没有别的企业能够像腾讯那样,在那么多的领域都能坐稳第二把交椅,所以在年财报上,腾讯才能真正坐稳第一把交椅。

有人可能会说,qq空间很早之前就有了,那个时候还没有人人网。但是早期的qq空间有很多弊病。那个时候的qq空间和qq客户端之间有着很高的耦合性。比如说,如果没有qq客户端作为中介,要直接去访问一个朋友的空间是不那么容易做到的。那时的qq空间更像是一个blog空间,而不是严格意义上的sns。

再者,Lukoff提到的离开校园后,用户的份额流向了人人和开心其实也是有原因的。因为在一个时期的中国本土企业,上班时间开qq总给人感觉是不认真工作的象征(只可能是导致qq大力推广im的原因之一),而之前我所提到的qq空间与qq客户端高耦合的弊病最终导致了用户流向了只要有浏览器就能很方便来社交和游戏的其他sns服务。而等到qq形象改变以及服务更新(比如解耦),明显已经落后于别人了。而sns固有的特点,可以称之为病毒式营销,使得份额流失的趋势很难在短期内逆转,这很有可能是qq空间不成功的原因之一(这让我想起我刚进大学的时候,我不得不放弃一直使用的联通而选择移动,因为学校里的大多数人都使用移动。)。

Lukoff还提及了qq空间存在的系统繁忙的问题。这个问题把腾讯往不成功的路上狠狠推了一把。说来好笑,其实这个系统繁忙在腾讯也是由来已久,记得oicq刚开始热起来的时候,每次申请qq号,都会遇到这个熟悉的“系统繁忙,请稍后再试”。不同的是,那个时候腾讯提供给了广大用户第二条不会繁忙的路:花一元钱买一个qq号;而这一次,我们所能选择的只有稍后再试了。这个后遗症正是我后来一直不大愿意使用qq空间的主要原因,就在前几天,我还遭遇到了这个问题。

Lukoff提到的第二点站点设计和功能。对于这一点我不是非常得苟同。因为这与qq的主要市场定位有关:年轻一代。过于朴实和单调的色彩搭配往往无法引起少年一代的兴趣。而用人民币堆砌的花哨,蹩脚,复杂以及混乱的页面却正迎合了这样一群人的口味。而且qq的消费排行榜(不知道现在还有没有)很好的激发了用户的消费炫富欲望。当然这也可能是导致用户成长变得理智以后流失到其他sns的主要原因之一。

对于Lukoff提到的最后一点,其实他已经很接近真相了。腾讯,不管现在他有多少服务,他的根本依然是他的腾讯qq。所以引用本杰明的话,qq空间的用户数据很可能适合im账号捆绑在一起的。我觉得事实正是如此。我不止一次得认为,只要腾讯qq(即im)的核心用户发生了转移,或者这项服务不再时髦和“必须”,腾讯的黄金时代很有可能就此过去。

从Lukoff没有提及的角度出发。qq空间的易达性要差于人人和开心。因为qzone始终是qq的2级域名。而人人和开心却是实实在在的1级域名。从我个人的角度,我访问qzone的常规路径依然是qq->某好友->空间。一个糟糕的初期定位基本决定了qq空间的不成功。不知我的这个行为模式是否具有普遍性。

至于帖子最后提到的qq空间翻身的机会,我的观点和lukoff依然是相近的。qq依然握有当今中国互联网领域令人闻风丧胆的用户基量以及深不可测的资金量,任何一个正确的举措都有可能使腾讯迎来一个漂亮的翻身仗。

由圆通建包操作引起的思考

什么是建包:
建包操作一词源于快递行业,这个词汇在某些快递中的过程中经常出现。它的意思是在快递的途中,把需要邮寄到同一个地方的大大小小的邮件打包成一个大包,一同发往目的地。
本来这个操作并不存在什么问题,但是在圆通这里就遇到了一些问题。现在大多快递公司都可以进行物流跟踪,圆通也不例外。之前我在淘宝订货走圆通不在少数,也没有遇到过什么意外。但是这次当我过了一天查看物流情况,看到了物流跟踪结果如下:
2010-07-24 20:47:18 福建厦门 快件揽收扫描
2010-07-24 21:15:46 福建厦门 建包操作

从最后一个操作,也就是“建包操作”之后就没有进一步的动静了,整整1天时间。其实本来如果是上车扫描之类的记录的话我也不会感到非常奇怪,因为物流走1天也是常有的事情。但是建包我第一次见,就感到十分困惑,所以我就拿着我的疑惑去询问了谷歌。得到的结果除了上述的哪个定义以外,还有大量的对圆通的投诉,抱怨,都表达了一个意思,建包操作以后就死在那里了,几天没有反应。其实产生这个结果的一个原因在这里:
圆通建包操作:
建包操作完成,中间再出现的中转记录,看不到单号了,只能看到包号,也就是说快递单号要到拆包后,才会有记录显示的。
明白了。圆通建包以后,物流没有死,只是单号消失了,中间几次转运的上车下车扫描都获取不到了。所以如果一次转运需要1天,那么多转运几次导致的单号“假死”现象也就可以理解了。
分析到这个程度,文章还没有结束。让我们看看以下两种情况:

  • 第一种:我订了货,物流正常要走3天,但是我无法直接查询物流的具体情况。
  • 第二种:我订了货,物流正常要走3天,我可以直接查询到物流的情况。

前一种情况,只要货能在正常的3天内到达,作为用户的我并不会感到不安和疑惑。
但是作为后一种情况,用户的要求就会变得很高,他们中的一部分可能会乐衷于时不时得检查一下,看看物流是否正常,看看是否已到家门口。这一定程度上增加了用户的紧张心理。原本3天内正常的物流,可能因为1天没有跟踪的刷新而让用户怀疑是不是出现了丢了这类的问题。
所以上文提到的圆通建包正中了这个问题的下怀。在建包以后的处理上,圆通向用户隐藏了实际进行中的物流动向,这种隐藏导致了用户在正常物流时间范围内不必要的恐慌和抱怨。
其实在物流查询的问题上圆通做得没有他的同行申通做得好,我们来看两单记录:
圆通的:
2010-07-19 22:34:18 广东广州海珠区滨江 快件揽收扫描
2010-07-20 01:10:01 广州分拨中心 下车扫描
2010-07-20 01:11:39 广州分拨中心 上车扫描
2010-07-20 22:44:55 杭州分拨中心 上车扫描
2010-07-20 22:45:19 杭州分拨中心 下车扫描
2010-07-20 22:49:37 浙江杭州 上车扫描
2010-07-21 07:37:47 浙江杭州天目山路 下车扫描
2010-07-21 07:45:45 浙江杭州天目山路 业务员派送扫描
2010-07-21 16:17:59 浙江杭州天目山路 签收扫描,签收人:本人

申通的:
2009-12-08 20:44 福建晋江公司 的收件员 沈建国已收件
2009-12-08 21:33 由福建晋江公司 发往 福建泉州航空部
2009-12-08 22:59 快件已到达福建泉州航空部 扫描员是 称重扫描2 上一站是福建晋江公司
2009-12-08 23:07 由福建泉州航空部 发往 河南郑州航空部

可以看到申通比圆通的运单跟踪废话更多,而这种废话多的表现给了用户一种安全感。我一直以为在电子商务的过程中,安全性和可信度是成功的关键因素,所以在这个细节上申通做得的确要比圆通来得好。
就问题论问题,来讨论一下解决方案,为什么圆通在建包以后就不能把包的跟踪情况都更新到各个子运单的动向里面呢。从操作上讲,既然在建包时进行了扫描,那么包号和单号应该存在一个对应关系,那么这个更新操作完全是可以实现的。不知是因为跟踪系统在需求时没有考虑到这一点,还是圆通故意绕过了这点来隐藏建包后的操作。
如果这个跟踪真的无法完成,我觉得至少应该在圆通的页面里给出对建包的说明,指出建包到拆包中间的操作是无法跟踪的,并估计出一个大概需要的物流时间,这样在这个漫长的包转运过程中的单号假死现象对用户造成的影响就会减弱很多。等到用户担心了,郁闷了,到贴吧里面去询问了,为时已晚,企业的品牌信誉就这样慢慢得荡然无存。

"由圆通建包操作引起的思考"by banum2010-7-25 at 8:21 下午Comments [2]Tags:

Powered by WordPress