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

简介:

本节书摘来自异步社区《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与其他的语言的比较:

http://www.python.org/doc/Comparisons.html

相关文章
|
12天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
12天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
5天前
|
安全 数据处理 开发者
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
17 1
|
5天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
34 0
|
6天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
18 0
|
6天前
|
Python
Python金融应用编程:衍生品定价和套期保值的随机过程
Python金融应用编程:衍生品定价和套期保值的随机过程
|
7天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
45 0
|
7天前
|
机器学习/深度学习 算法 定位技术
python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
23 1
|
11天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。