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创始人:吉多·范罗苏姆
恭敬地抄录来自《维基百科》的描述:
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开发者的开发理念:
- The Zen of Python
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Complex is better than complicated.
- Flat is better than nested.
- Sparse is better than dense.
- Readability counts.
- Special cases aren't special enough to break the rules.
- Although practicality beats purity.
- Errors should never pass silently.
- Unless explicitly silenced.
- In the face of ambiguity, refuse the temptation to guess.
- There should be one-- and preferably only one --obvious way to do it.
- Although that way may not be obvious at first unless you're Dutch.
- Now is better than never.
- Although never is often better than “right” now.
- If the implementation is hard to explain, it's a bad idea.
- If the implementation is easy to explain, it may be a good idea.
- Namespaces are one honking great idea -- let's do more of those!
网上能够看到这段文字的中文译本,读者可以去搜索阅读。