0.1 关于Python的故事

学习一种编程语言是一件很有意思的事情,从现在开始,我就和你一起来学习一种叫作Python的编程语言。

在编程界,存在着很多某种语言的忠实跟随者,因为忠实,就会如同卫道士一样有了维护那种语言荣誉的义务,所以总见到有人争论哪种语言好、哪种语言不好。当然,好与坏的标准是不一样的,有些人以学了之后能不能挣大钱为标准,有些人以是否容易学为标准,或许还有人以能不能将来和妹子一同工作为标准(也或许没有),甚至有些人就没有什么标准,只是凭感觉或者道听途说而人云亦云罢了。

读者在本书中将看到一个颇为迷恋于Python的人,因为全书看不到一句有关Python的坏话(如果有,则肯定是笔误,是应该删除的部分)。

不管是语言还是其他什么,挑缺点是比较容易的事情,但找优点都是困难的,所以,《圣经》中那句话——为什么你看见弟兄的眼中有刺,却不想自己眼中有梁木呢?——是值得我们牢记的。

在本书开始就废话连篇,显见本书不会有什么“干货”,倒是“水货”颇多,并不是因为“水是生命的源泉”,而是因为作者水平有限,如果不掺“水”,唯恐说不清道不明,还敬请读者谅解。嫌“水”多的,就此可以合上本书去看网上的各种电影吧。也不用在网上喷我,因为那样只能增加更多的“口水”(还是水)。

下面说点儿正经的。

0.1.1 Python的昨天、今天和明天

这个题目有点大了,似乎回顾过去、考察现在、张望未来都是那些掌握方向的大人物做的。那就让我们每个人都成为大人物吧。因为如果不回顾一下历史,似乎无法满足好奇心;如果不考察一下现在,也不放心(担心学了之后没有什么用途);如果不张望一下未来,怎么能吸引(也算是一种忽悠吧)你呢?

1.Python的历史

历史向来是成功者的传记,现在流传的关于Python的历史也是如此。

Python的创始人为吉多·范罗苏姆(Guido van Rossum),关于他开发Python的过程,很多资料里面都要记录下面的故事:

1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是一个蒙提·派森的飞行马戏团的爱好者。ABC是由吉多参加设计的一种教学语言,在吉多本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在Python中避免这一错误,并取得了非常好的效果,完美结合了C和其他一些语言。

这个故事是从维基百科里面直接复制过来的,很多讲Python历史的资料里面,也都转载了这一段文字。但是,在我来看,吉多是为了“打发时间”而决定开发Python,源自他的这样一段自述:

Over six years ago,in December 1989,I was looking for a"hobby"programming project that would keep me occupied during the week around Christmas.My office(a government-run research lab in Amsterdam)would be closed,but I had a home computer,and not much else on my hands.I decided to write an interpreter for the new scripting language I had been thinking about lately:a descendant of ABC that would appeal to Unix/C hackers.I chose Python as a working title for the project,being in a slightly irreverent mood(and a big fan of Monty Python's Flying Circus).(原文地址:https://www.python.org/doc/essays/foreword/)

首先,必须承认,这个哥们儿是一个非常牛的人,此处献上恭敬的崇拜。

其次,刚刚开始学习Python的朋友,可千万别认为Python是一个可以随随便便鼓捣的东西,人家也是站在巨人的肩膀上的。

第三,牛人在成功之后,往往把奋斗的过程描绘得比较简单。或者是出于谦虚,或者是为了让人听起来他更牛。反正,我们看最后结果的时候,很难感受过程中的酸甜苦辣。

不管怎样,吉多·范罗苏姆在那时刻创立了Python,而且,更牛的在于他具有现代化的思维——开放,并通过Python社区,吸引来自世界各地的开发者,参与Python的建设。在这里,请读者一定要联想到Linux和它的创始人林纳斯·托瓦兹。两者都秉承“开放”思想,得到了来自世界各地开发者和应用者的欢呼和尊敬。

请读者向所有倡导“开放”的牛人们表示敬意,是他们让这个世界变得更美好,他们以行动诠释了热力学第二定律——“熵增原理”。

2.Python的现在

Python现在越来越火了,因为它搭上了“大数据”、“云计算”、“自然语言处理”等这些时髦名词的便车。

网上时常会有一些编程语言排行榜之类的东西,有的初学者常常被排行榜所迷惑,总想要学习排列在第一位的,认为排在第一位的编程语言需求量大。不管排行榜是怎么编制的,Python虽然没有登上状元、榜眼、探花之位,但也不太靠后呀。

另外一个信息,更能激动一下初学者那颗脆弱的小心脏。

Dice.com网上对20000名IT专业人士进行调查的结果显示:Java类程序员平均工资91060美元;Python类程序员平均工资90208美元。

Python程序员比Java程序员的平均工资低,但看看差距,再看看两者的学习难度,学习Python绝对是一个性价比非常高的投资。

这么合算的编程语言不学等待何时?

3.Python的未来

Python的未来要靠读者了,你学好了、用好了,未来它就光明了,它的未来在你手里。如图0-1所示为Python创始人吉多·范罗苏姆。

0.1.2 Python的特点

很多高级语言都宣称自己是简单的、入门容易的,并且具有普适性,但真正能做到这些的,只有Python。有朋友做了一件衬衫,上面写着“生命有限,我用Python”,这说明什么?说明Python有着简单、开发速度快、节省时间和精力的特点。因为它是开放的,有很多可爱的开发者(为开放社区做贡献的开发者是最可爱的人),将常用的功能做好了放在网上,谁都可以拿过来使用。这就是Python,这就是开放。

0.1 关于Python的故事 - 图1图0-1 Python创始人:吉多·范罗苏姆

恭敬地抄录来自《维基百科》的描述:

Python是完全面向对象的语言,函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符,因此也支持泛型设计。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools和itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。

虽然Python可能被粗略地分类为“脚本语言”(Script Language),但实际上一些大规模软件开发项目(例如Zope、Mnet、BitTorrent及Google)也都广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅做简单程序设计任务的语言,如shell script、VBScript等,但其只能处理简单任务的编程语言,并不能与Python相提并论。

Python本身被设计为可扩充的,并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其他需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用,使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“2004年,Python已在Google内部使用,Google招募许多Python高手,但在这之前就已决定使用Python。他们的目的是尽量使用Python,在不得已时改用C++;在操控硬件的场合使用C++,在快速开发时使用Python。”

可能这里面有一些术语还不是很理解,没关系,只要明白:Python是一种很牛的语言,应用简单,功能强大,Google都在使用,这就足够了,足够让你下决心学习了。

0.1.3 Python哲学

Python之所以与众不同,还在于它强调一种哲学理念:优雅、明确、简单。有一段诗歌读起来似乎很玄,但真实反映了Python开发者的开发理念:

  1. The Zen of Python
  2.  
  3. Beautiful is better than ugly.
  4. Explicit is better than implicit.
  5. Simple is better than complex.
  6. Complex is better than complicated.
  7. Flat is better than nested.
  8. Sparse is better than dense.
  9. Readability counts.
  10. Special cases aren't special enough to break the rules.
  11. Although practicality beats purity.
  12. Errors should never pass silently.
  13. Unless explicitly silenced.
  14. In the face of ambiguity, refuse the temptation to guess.
  15. There should be one-- and preferably only one --obvious way to do it.
  16. Although that way may not be obvious at first unless you're Dutch.
  17. Now is better than never.
  18. Although never is often better than right now.
  19. If the implementation is hard to explain, it's a bad idea.
  20. If the implementation is easy to explain, it may be a good idea.
  21. Namespaces are one honking great idea -- let's do more of those!

网上能够看到这段文字的中文译本,读者可以去搜索阅读。