作者:马克·卢茨(Mark Lutz)
如需转载请联系华章科技
01 Python有哪些技能上的优点
1. 面向工具和函数式

从根本上讲,Python是一种面向工具的措辞。它的类模型支持多态、运算符重载和多重继续等高等观点,并且以Python特有的简洁的语法和类型为背景,OOP十分易于利用。事实上,纵然你不懂这些术语,仍会创造学习Python比学习其他OOP措辞要随意马虎得多。
除了作为一种强大的代码组织和重用手段以外,Python的OOP实质使它成为其他面向工具系统措辞的空想脚本工具。例如,通过适当的粘接代码,Python程序可以对C++、Java和C#的类进行子类的定制。
OOP只是Python的一个选择而已,这一点非常主要。纵然不能立马成为一个面向工具高手,但你同样可以连续深入学习。就像C++一样,Python既支持面向工具编程也支持面向过程编程的模式。如果条件许可,其面向工具的工具可以立即派上用场。这对策略开拓模式十分有用,该模式常用于软件开拓的设计阶段。
除了最初的过程式(语句为根本)和面向工具(类为根本)的编程范式,Python在最近几年内置了对函数式编程的支持——一个多数情形下包括天生器、推导、闭包、映射、装饰器、匿名lambda函数和第一类函数工具的凑集。这是对其本身OOP工具的补充和替代。
2. 免费
Python的利用和分发是完备免费的。就像其他的开源软件一样,例如,Tcl、Perl、Linux和Apache。你可以从Internet上免费得到Python的源代码。你可以不受限定地复制Python,或将其嵌入你的系统或者随产品一起发布。实际上,如果你乐意的话,乃至可以发卖它的源代码。
但请别误会:“免费”并不代表“没有支持”。正好相反,Python的在线社区对用户需求的相应和商业软件一样快。而且,由于Python完备开放源代码,提高了开拓者的实力,并产生了一个很大的专家团队。
只管研究或改变一种程序措辞的实现并不是对每一个人来说都那么有趣,但是当你知道如果须要的话可以做到这些,该是多么的令人欣慰。你不须要去依赖商业厂商的聪慧,由于终极的文档和终极的净土(源码)听凭你的利用。
Python的开拓是由社区驱动的,是Internet大范围的协同互助努力的结果。Python措辞的改变必须遵照一套规范而有约束力的程序(称作PEP流程),并须要经由规范的测试系统进行彻底检讨。正是这样才使得Python相对付其他措辞和系统可以守旧地持续改进。
只管Python 2.X和Python 3.X版本之间的分裂有力并蓄意地毁坏了这项传统,但常日它仍旧表示在Python的这两个系列内部。
3. 可移植
Python的标准实现是由可移植的ANSI C编写的,可以在目前所有主流平台上编译和运行。例如,如今从掌上电脑(PDA)到超级打算机,随处可见 Python的运行。Python可以不才列平台上运行(这里只是部分列表):
Linux和UNIX系统微软Windows(所有当代版本)Mac OS(包括OS X 和经典版)BeOS、OS/2、VMS和QNX实时操作系统,例如VxWorksCray超级打算机和IBM大型机运行Palm OS、PocketPC和Linux的PDA运行 Symbian OS和Windows Mobile 的移动电话游戏终端和iPod运行谷歌安卓系统和苹果iOS系统的平板和智好手机以及更多除了措辞阐明器本身以外,Python发行时自带的标准库和模块在实现上也都尽可能地考虑到了跨平台的移植性。此外,Python程序自动编译成可移植的字节码,这些字节码在已安装兼容版本Python的平台上运行的结果都是相同的。
这些意味着Python程序的核心措辞和标准库可以在Linux、Windows和其他带有Python阐明器的平台上无差别地运行。大多数Python外围接口都有平台干系的扩展(例如COM支持Windows),但是核心措辞和库在任何平台都一样。
就像之前我们提到的那样,Python还包含了一个叫作tkinter(Tkinter的2.X版本)的Tk GUI工具包,它可以使Python程序实现功能完全的,无须做任何修正即可在所有主流GUI桌面平台运行的用户图形界面。
4. 功能强大
从措辞特性的角度来看,Python是一个稠浊体。它丰富的工具集使它介于传统的脚本措辞(如Tcl、Scheme和Perl)和系统措辞(如C、C++和Java)之间。Python供应了所有脚本措辞的大略和易用性,并且具有那些在编译措辞中才能找到的高等软件工程工具。
不像其他脚本措辞不同,这种结合使Python在长期大型的开拓项目中十分有用。下面是一些Python工具箱中的工具简介:
动态类型:Python在程序运行过程中跟踪工具的类型,不须要代码中进行关于繁芜的类型和大小的声明。事实上,Python中没有类型或变量声明这种做法。由于Python代码不约束数据的类型,它每每自动地运用了一种广义上的工具。自动内存管理:Python自动为工具分配空间,并且当工具不再利用时将自动撤销空间(“垃圾回收”),当须要时自动扩展或紧缩。正如你将学到的,Python能够帮你完成底层的内存管理。大型程序支持:为了能建立更大规模的系统,Python包含了模块、类和非常等工具。这些工具许可你把系统组织为组件,利用OOP重用并定制代码,并以一种优雅的办法处理事宜和缺点。前面提到的Python函数式编程工具,供应了实现相同目标的其他方法。内置工具类型:Python供应了常用的数据构做作为措辞的基本组成部分。例如,列表(list)、字典(dictionary)、字符串(string)。我们将会看到,它们灵巧并易于利用。例如,内置工具可以根据需求扩展或紧缩,可以任意地组织繁芜的信息等。内置工具:为了对以上工具类型进行处理,Python自带了许多强大的标准操作,包括拼接(concatenation)、分片(slice)、排序(sort)和映射(mapping)等。库工具:为了完成更多特定的任务,Python预置了许多预编码的库工具,从正则表达式匹配到网络都支持。当你节制了措辞本身,就能在运用级的操作中利用Python的库工具。第三方工具:由于Python是开源的,它鼓励开拓者供应Python内置工具之外的预编码工具。你可以在网上找到COM、图像处理、数值编程、XML、数据库访问等许多免费的支持工具。除了这一系列的Python工具外,Python保持了相称简洁的语法和设计。综合这统统得到的便是一个具有脚本措辞所有可用性的强大编程工具。
5. 可稠浊
Python程序可以以多种办法轻易地与其他措辞编写的组件“粘接”在一起。例如,Python的C措辞API可以帮助Python程序灵巧地调用C程序。这意味着可以根据须要给Python程序添加功能,或者在其他环境系统中利用Python。
例如,将Python与C或者C++写成的库文件稠浊起来,使Python成为一个前端措辞和定制工具。就像之前我们所提到过的那样,这使Python成为一个很好的快速原型工具;系统可以在开拓初期出于速率考虑利用Python实现,然后转移至C,根据不同期间性能的须要逐步实现系统。
6. 相对大略易用
同其他措辞(如C++、Java和C#)比较,Python编程对大多数用户来讲出奇得大略。要运行Python程序,你只需大略地键入Python程序并运行就可以了。不须要其他措辞(如C或C++)所必需的编译和链接等中间步骤。
Python可立即实行程序,这形成了一种交互式编程体验和不同情形下快速调度的能力,每每在修正代码后险些能立即看到程序改变后的效果。
当然,开拓周期短仅仅是Python易用性的一方面的表示。Python供应了简洁的语法和强大的内置工具。实际上,Python曾被称为“可实行的伪代码”。由于它减少了其他工具常见的繁芜性,在实现相同的功能时,Python程序比采取其他盛行措辞编写的程序更为大略、小巧,也更灵巧。
7. 相对大略易学
这一部分引出了本书的重点:尤其同其他广泛利用的编程措辞比较时,Python措辞的核心相称大略易学。实际上,如果你是一位有履历的程序员,你可以期望在几天内写出小规模的Python代码,你大概能在几个小时之内习得Python的一招一式,但是你并不能指望在如此短的韶光内成为专家(忘掉市情上的那些宣扬广告吧)。
当然,节制任何像本日Python这样的充足主题都不是一件轻松事,我们将在本书的剩余部分致力于此项任务。但是为了节制Python而进行的真正投资是非常值得的——终极你会获取险些在每个打算机运用程序领域都适用的编程技能。此外,很多人还创造Python的学习曲线比其他的编程措辞更加平缓。
这对付那些想学习措辞以在事情中运用的专业职员来说是一个好,同样对付那些利用Python层进行定制和掌握的系统的终端用户来说,也是一个好。如今,许多系统都依赖于这一事实:用户可以在没有或者得到很少支持的情形下就学到足够的Python知识以便当场增删他们的Python定制化代码。
此外,Python还孕育出一群不以编程为生而以编程为乐的用户,他们并不须要节制全面的软件开拓技巧。只管Python还是有很多高等编程工具,但不论对初学者还是里手来说,Python的核心措辞精髓仍是相称大略的。
8. 以Monty Python命名
好的,在讲完这么多技能方面的上风后,我想再戳穿一个Python天下里面令人惊奇而守旧良好的小秘密。
只管Python的书和图标中有很多爬行动物,原形却是Python以英国笑剧组“Monty Python”命名——这是BBC 在20世纪70年代笑剧《Monty Python's Flying Circus》的制片方,也是至今仍在盛行的少量包括《Monty Python and the Holy Grai》在内的大电影的制片方。Python的最初创作者是Monty Python的粉丝,这同其他许多的软件开拓者一样(事实上,这两个领域存在某种对称性……)。
▲《Python学习手册》书封上的爬行动物
这段有趣的历史无疑增加了Python代码例子的诙谐属性。例如,作为一样平常变量名命名传统的“foo”和“bar”在Python天下中变成了“spam”和“eggs”。而在Python中偶尔涌现的“Brian”,“ni”和“shrubbery”表现得也同此类似。它乃至影响了Python的全体社区。
当然了,如果你对这部笑剧非常熟习,就能体会这个中的笑点,但如果不熟习则相反。你不必非得熟习Monty Python这部剧来理解从剧中得到灵感的例子(包括你将在本书中看到的许多例子),但至少你现在知道它们的起源了。(嗨——我已经见告你啦。)
02 Python和其他措辞比较起来怎么样末了,你大概已经知道了,人们每每将Python与Perl、Tcl和Javat等措辞比较较。这部分总结这方面的一些普遍共识。
我想预先表明我个人并不喜好通过诋毁竞争者来得胜——这在长期是行不通的,而且也不是这里的目的。此外,这并不是一场零和游戏——绝大多数的程序员在他们的职业生涯中都会利用许多措辞。只管如此,编程工具也展示出值得考虑的选择和权衡。毕竟,如果Python没有比它的竞争者供应更多的东西,那么它一开始就不会被人们利用了。
我们之前已经先容过性能上的权衡,那么这里重点谈一下功能。只管下面列举的这些措辞也是值得学习和利用的有力工具,但人们常日认为Python:
比Tcl强大。Python强有力地支持“大规模编程”,使实在用于开拓大型系统,它的运用程序库也更加丰富。比Perl更具可读性。Python有着简洁的语法和大略连贯的设计,这反过来使得Python更具可读性和更易于掩护,同时有助于减少程序bug。比Java和C#更大略、更易于利用。Python是一门脚本措辞,但Java和C#两者从像C++这样更加大型的OOP系统措辞中继续了许多语法和繁芜性。比C++更大略、更易于利用。Python代码比等效的C++代码更加大略,长度只有其五分之一到三分之一。只管作为脚本措辞,Python有时能扮演许多不同的角色。比C更加大略和高等。Python阔别底层硬件架构从而降落了代码繁芜性,拥有更好的组织构造,并比C(C++的先人)更加友善。比Visual Basic更强大,用场广泛,也更具备跨平台特性。Python是更加广泛利用的更丰富的措辞,它的开源实质意味着它不可能被某一个公司所掌控。比PHP更易懂并且用场更广。Python也用来构建Web站点,但是,它也运用于险些每个打算机领域,从机器人到电影动画和游戏。比JavaScript更强大和用场广泛。Python有一个更大的工具集,也并不是牢牢地束缚于Web开拓。它也用于科学建模、仪器调试等。比Ruby更具可读性,并更为人们所接管。Python的语法混乱更少,尤其在较繁芜代码中,同时它的OOP对用户和和不太利用OOP的工程中是完备可选的。比Lua更成熟和受到更广泛关注。Python更加弘大的特性凑集和更加扩展的库支持给予其比Lua(一门和Tcl一样的嵌入式“胶水”措辞)更加宽广的视野。比SmallTalk、Lisp和Prolog更不晦涩。Python拥有这类函数式措辞的动态品味,但是也拥有开拓者和定制系统终端用户都可接管的传统语法。特殊是对不仅仅用于个人扫描文本文件,未来会被人们(包括你在内)读到的程序而言,很多人会创造Python比目前任何可用的脚本或编程措辞都划得来。不仅如此,除非你的运用哀求最尖真个性能,Python每每是C、C++和Java等系统开拓措辞的一个不错的替代品:Python代码能够常常实现相同的目标,却会减少很多编写、调试和掩护的麻烦。
当然,本文作者从1992年就已经是Python的正式布道者了,以是尽可能接管这些见地吧(其他措辞的推戴者的利益可能会受到些丢失)。然而,所有这些不雅观点的确代表了投入韶光和精力来探索Python的浩瀚开拓者的同等意见。
关于作者:Mark Lutz是一位天下级的Python培训讲师。他是Python脱销书本的作者,同时从1992年起就成为Python社区的引领者,有着30余年的软件开拓履历。
本文摘编自《Python学习手册》(原书第5版),经出版方授权发布。
延伸阅读《Python学习手册》(原书第5版)
推举语:本书将帮助你利用Python编写出高质量、高效的并且易于与其他措辞和工具集成的代码。本书根据Python专家Mark Lutz的著名培训课程编写而成,是易于节制和自学的Python教程。