本节书摘来自异步社区《Python核心编程(第二版)》一书中的第1章,第1.7节,作者[美]Wesley J. Chun,宋吉广 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.7 比较Python(Python与其他语言的比较)
Python已经和很多语言比较过了。一个原因就是Python提供了很多其他语言拥有的特性,另外一个原因就是Python本身也是由诸多其他语言发展而来的,包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell和其他的脚本语言,等等。Python就是“浓缩的精华”:Van Rossum研究过很多语言,从中吸收了许多觉得不错的特性,并将它们溶于一炉。
然而,往往因为Python是一门解释型语言,你会发现大多数的比较是在Perl、Java、Tcl,还有JavaScript之间进行的。Perl是另外一种脚本语言,远远超越了标准的shell脚本。像Python一样,Perl赋予了你所有编程语言的功能特性,还有系统调用能力。
Perl最大的优势在于它的字符串模式匹配能力,其提供了一个十分强大的正则表达式匹配引擎。这使得Perl实际上成为了一种用于过滤、识别和抽取字符串文本的语言,而且它一直是开发Web 服务器端CGI(common gateway interface,通用网关接口)网络程序的最流行的语言。Python的正则表达式引擎很大程度上是基于Perl的。
然而,Perl语言的晦涩和对符号语法的过度使用,让解读变得很困难。这些语法令初学者不得精要,为他们的学习带来了不小的阻碍。Perl的这些额外的“特色”使得完成同一个任务会有多个方法,进而引起了开发者之间的分歧。最后,通常当你想阅读几个月前写的Perl脚本的时候都不得不求助参考书。
Python也经常被拿来和Java作对比,因为他们都有类似的面向对象的特性和语法。Java的语法尽管比C++简单的多,但是依旧有些繁琐,尤其是当你想完成一个小任务的时候。Python的简洁与纯粹使用Java相比提供了更加快速的开发环境。在Python和Java的关系上,一个非常重大的革命就是Jython的开发。Jython是一个完全用Java开发的Python解释器,现在可以在只有Java虚拟机的环境中运行Python程序。我们会在后面的章节中简单讲述Jython的更多优点,但是现在就可以告诉你:在Jython的脚本环境中,你可以熟练地处理Java对象,Java可以和Python对象进行交互,你可以访问自己的Java标准类库,就如同Java一直是Python环境的一部分一样。
现在,由于Rails项目的流行,Python也经常被拿来和Ruby进行比较。就像前面我们提到的,Python是多种编程范式的混合,它不像Ruby那样完全面向对象,也没有像Smalltalk那样的块,或许这正是Ruby最引人注目的特性。Python有一个字节码解释器,而Ruby没有。Python更加易读,而Ruby事实上可以看作是面向对象的Perl。相对于Rails,Python有几个自己的Web应用框架,比如Django和Turbogears这两个项目。
Tcl是另一种可以与Python相提并论的脚本语言。Tcl是最易于使用的脚本语言之一,程序员很容易像访问系统调用一样对Tcl语言进行扩展。Tcl直到今天仍然很流行,与Python相比,它或许有更多局限性(主要是因为它有限的几种数据类型),不过它也拥有和Python一样的通过扩展超越其原始设计的能力。更重要的是,Tcl通常总是和它的图形工具包Tk一起工作,一起协同开发图形用户界面应用程序。因为它非常流行,所以Tk已经被移植到Perl(Perl/Tk)和Python(Tkinter)中。同样有一个有争议的观点,那就是与Tcl相比,因为Python有类、模块及包的机制,所以写起大程序来更加得心应手。
Python有一点点函数化编程(functional programming ,FP)结构,这使得它有点类似于List或Scheme语言。尽管Python不是传统的函数化编程语言,但它持续地从Lisp和haskell语言中借用一些有价值的特性。举例来说,列表解析就是一个广受欢迎的来自Haskell的特性,而Lisp程序员在遇到lambda、map、filter和reduce时也会感到异常亲切。
JavaScript 是另外一种非常类似Python的面向对象脚本语言。优秀的JavaScript程序员学起Python来易如反掌。 聪慧的读者会注意到JavaScript是基于原型系统的,而Python则遵循传统的面向对象系统,这使得二者的类和对象有一些差异。
下面列出了有关Python与其他语言进行比较的网页。
Perl
http://www2.linuxjournal.com/article/3882
http://llama.med.harvard.edu/~fgibbons/PerlPythonPhrasebook.html
http://aplawrence.com/Unixart/pythonvsperl.html
http://pleac.sf.net/pleac_python
http://www.garshol.priv.no/download/text/perl.html
Java
http://dirtsimple.org/2004/12/python-is-not-java.html
http://twistedmatrix.com/users/glyph/rant/python-vs-java.html
http://netpub.cstudies.ubc.ca/oleary/python/python_java_comparison.php
Lisp
http://strout.net/python/pythonvslisp.html
http://norvig.com/python-lisp.html
Ruby
http://blog.ianbicking.org/ruby-python-power.html
http://www.rexx.com/~oinkoink/Ruby_v_Python.html
http://dev.rubycentral.com/faq/rubyfaq-2.html
Perl、C++
http://strombergers.com/python/
Perl、Java、C++
http://furryland.org/~mikec/bench/
C++、Java、Ruby
http://dmh2000.com/cjpr
Perl, Java, PHP, Tcl
http://www-128.ibm.com/developerworks/linux/library/l-python101.html
http://www-128.ibm.com/developerworks/linux/library/l-script-survey/
C、C++、Java、Perl、Rexx、Tcl
http://www.ubka.uni-karlsruhe.de/indexer-vvv/ira/2000/5
你可以在下面的网址中看到更多Python与其他的语言的比较: