Python 和其他语言相比如何呢?什么时候该选择什么语言呢?本节会展示一些其他语言的代码片段,这样更直观一些。如果有些语言你从未使用过,也不必担心,你并不需要看懂所有代码(当你看到最后的Python 示例时,会发现没学过其他语言也不是什么坏事)。如果你只对Python 感兴趣,完全可以跳过这一节。 下面的每段程序都会打印出一个数字和一条描述语言的信息。 如果你使用的是命令行或者终端窗口,那你使用的就是shell 程序,它会读入你的命令、运行并显示结果。Windows 的shell 叫作cmd,它会运行后缀为.bat 的batch 文件。Linux 和其他类Unix 系统(包括 Mac OS X)有许多shell 程序,最流行的称为bash 或者sh。shell有许多简单的功能,比如执行简单的逻辑操作以及把类似* 的通配符扩展成文件名。你可以把命令保存到名为“shell 脚本”的文件中稍后运行。shell 可能是程序员接触到的第一个程序。它的问题在于程序超过百行之后扩展性很差,并且比其他语言的运行速度慢很多。下面就是一段shell 程序: #!/bin/sh language=0 echo "Language $language: I am the shell. So there." 如果你把这段代码保存为meh.sh 并通过sh meh.sh 命令来运行它,就会看到下面的输出: Language 0: I am the shell. So there. 老牌语言C 和C++ 是底层语言,只有极其重视性能时才会使用。它们很难学习,并且有许多细节需要你自己处理,处理不当就可能导致程序崩溃和其他很难解决的问题。下面是一段C 程序: #include <stdio.h> int main(int argc, char *argv[]) { int language = 1; printf("Language %d: I am C! Behold me and tremble!n", language); return 0; } C++ 和C 看起来很相似,但是特性完全不同: #include <iostream> using namespace std; int main(){ int language = 2; cout << "Language " << language << ": I am C++! Pay no attention to that C behind the curtain!" << endl; return(0); } Java 和C# 是C 和C++ 的接班人,解决了后者的许多缺点,但是相比之下代码更加冗长,写起来也有许多限制。下面是Java 代码: public class Overlord { public static void main (String[] args) { int language = 3; System.out.format("Language %d: I am Java! Scarier than C!n", language); } } 如果你没写过这些语言的程序,可能会觉得很奇怪:这都是什么东西?有些语言有很大的语法包袱。它们有时被称为静态语言,因为你必须告诉计算机许多底层细节,下面我来解释一下。 语言有变量——你想在程序中使用的值的名字。静态语言要求你必须声明每个变量的类型:它会使用多少内存以及允许的使用方法。计算机利用这些信息把程序编译成非常底层的机器语言(专门给计算机硬件使用的语言,硬件很容易理解,但是人类很难理解)。计算机语言的设计者通常必须进行权衡,到底是让语言更容易被人使用还是更容易被计算机使用。声明变量类型可以帮助计算机发现更多潜在的错误并提高运行速度,但是却需要使用者进行更多的思考和编程。C、C++ 和Java 代码中经常需要声明类型。举例来说,在上面的例子中必须使用int 将language 变量声明为一个整数。(其他类型的存储方式和整数不同,比如浮点数3.14159、字符以及文本数据。) 那么为什么它们被称为静态语言呢?因为这些语言中的变量不能改变类型。它们是静态的。整数就是整数,永远无法改变。 相比之下,动态语言(也被称为脚本语言)并不需要在使用变量前进行声明。假设你输入x = 5,动态语言知道5 是一个整数,因此变量x 也是整数。这些语言允许你用更少的代码做更多的事情。动态语言的代码不会被编译,而是由解释器程序来解释执行。动态语言通常比编译后的静态语言更慢,但是随着解释器的不断优化,动态语言的速度也在不断提升。长期以来,动态语言的主要应用场景都是很短的程序(脚本),比如给静态语言编写的程序进行数据预处理。这样的程序通常称为胶水代码。虽然动态语言很擅长做这些事,但是如今它们也已经具备了处理大型任务的能力。 许多年来,Perl(http://www.perl.org/)一直是一门万能的动态语言。Perl 非常强大并且有许多扩展库。然而,它的语法非常难用,并且似乎无法阻挡Python 和Ruby 的崛起。下面是一段Perl 代码: my $language = 4; print "Language $language: I am Perl, the camel of languages.n"; Ruby(http://www.ruby-lang.org/)是一门新语言。它借鉴了一些Perl 的特点,并且因为Web 开发框架Ruby on Rails 红遍大江南北。Ruby 和Python 的许多应用场景相同,选择哪一个通常看个人喜好或者是否有你需要的库。下面是一段Ruby 代码: language = 5 puts "Language #{language}: I am Ruby, ready and aglow." PHP(http://www.php.net/)在Web 开发领域非常流行,因为它可以轻松结合HTML 和代码,就像例子中展示的那样。然而,PHP 语言本身有许多缺陷,并且很少被应用在Web以外的领域。 <?PHP $language = 6; echo "Language $language: I am PHP. The web is <i>mine<i>, I say.n"; ?> 最后是我们的主角,Python: language = 7 print("Language %s: I am Python. What's for supper?" % language)