天天看点

《Python核心编程(第二版)》——1.7 比较Python(Python与其他语言的比较)

本节书摘来自异步社区《python核心编程(第二版)》一书中的第1章,第1.7节,作者[美]wesley j. chun,宋吉广 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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

<a href="http://www2.linuxjournal.com/article/3882">http://www2.linuxjournal.com/article/3882</a>

<a href="http://aplawrence.com/unixart/pythonvsperl.html">http://aplawrence.com/unixart/pythonvsperl.html</a>

<a href="http://pleac.sf.net/pleac_python">http://pleac.sf.net/pleac_python</a>

<a href="http://www.garshol.priv.no/download/text/perl.html">http://www.garshol.priv.no/download/text/perl.html</a>

java

<a href="http://dirtsimple.org/2004/12/python-is-not-java.html">http://dirtsimple.org/2004/12/python-is-not-java.html</a>

<a href="http://twistedmatrix.com/users/glyph/rant/python-vs-java.html">http://twistedmatrix.com/users/glyph/rant/python-vs-java.html</a>

<a href="http://netpub.cstudies.ubc.ca/oleary/python/python_java_comparison.php">http://netpub.cstudies.ubc.ca/oleary/python/python_java_comparison.php</a>

lisp

<a href="http://norvig.com/python-lisp.html">http://norvig.com/python-lisp.html</a>

ruby

<a href="http://blog.ianbicking.org/ruby-python-power.html">http://blog.ianbicking.org/ruby-python-power.html</a>

<a href="http://dev.rubycentral.com/faq/rubyfaq-2.html">http://dev.rubycentral.com/faq/rubyfaq-2.html</a>

perl、c++

<a href="http://strombergers.com/python/">http://strombergers.com/python/</a>

perl、java、c++

c++、java、ruby

<a href="http://dmh2000.com/cjpr">http://dmh2000.com/cjpr</a>

perl, java, php, tcl

<a href="http://www-128.ibm.com/developerworks/linux/library/l-python101.html">http://www-128.ibm.com/developerworks/linux/library/l-python101.html</a>

<a href="http://www-128.ibm.com/developerworks/linux/library/l-script-survey/">http://www-128.ibm.com/developerworks/linux/library/l-script-survey/</a>

c、c++、java、perl、rexx、tcl

<a href="http://www.ubka.uni-karlsruhe.de/indexer-vvv/ira/2000/5">http://www.ubka.uni-karlsruhe.de/indexer-vvv/ira/2000/5</a>

你可以在下面的网址中看到更多python与其他的语言的比较:

<a href="http://www.python.org/doc/comparisons.html">http://www.python.org/doc/comparisons.html</a>