
1.5 Python和其他语言
与其他语言相比,Python如何呢?在何时何地你会优先选择某一种语言呢?本节会展示一些其他语言的样例代码,以便让你见识一下Python的竞争对象是什么样子。没有使用过这些语言也不必担心,因为你不需要看懂所有代码。(读完本书之后,你会发现也没必要非得使用某些语言。)
下面的每个程序都会打印出一个数字和一句自我介绍。
如果你使用的是终端或者终端窗口,则读取你输入的命令、运行并显示结果的程序称为shell程序。Windows的shell叫作cmd,它会运行后缀为.bat的批处理文件。Linux和其他类Unix系统(包括macOS)则拥有很多shell程序,其中最流行的是bash或者sh。shell提供了各种简单的功能,比如简单的逻辑判断以及把*等通配符扩展为文件名。你可以把命令保存到文件(shell脚本)中随后运行。shell可能是程序员接触到的第一个程序。不过shell脚本在规模超过数百行之后就难以很好地扩展了,而且运行速度远不如其他语言。下面就是一段shell程序:
#!/bin/sh language=0 echo "Language $language: I am the shell. So there."
如果将其保存为文件test.sh并与sh test.sh一起运行,你会看到以下输出:
Language 0: I am the shell. So there.
老而弥坚的C和C++属于相当低层的语言,在速度至上时才会使用。你使用的操作系统以及很多相关程序(包括python程序)可能就是用C或C++编写的。
这两种语言不易学习和掌握。你需要跟踪内存管理等很多细节,稍有不慎,就会导致程序崩溃。在诊断问题时也是困难重重。下面是一个短小的C程序:
#include <stdio.h> int main(int argc, char *argv[]) { int language = 1; printf("Language %d: I am C! See? Si!\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 my little brother!" << \ endl; return(0); }
作为C和C++的“接班人”,Java和C#避免了“前辈们”的一些问题,尤其是内存管理,但多少变得有些烦琐。下面是一段Java代码:
public class Anecdote { public static void main (String[] args) { int language = 3; System.out.format("Language %d: I am Java! So there!\n", language); } }
如果没有使用过这些语言,你可能会觉得奇怪:这都是什么东西?我们只想打印几行简单的文本啊。有些语言身背很重的语法“包袱”。第2章会介绍更多的细节。
C、C++和Java都属于静态语言,需要你指定数据类型等一些低层细节。附录A展示了像整数这样的数据类型在计算机中占据了多少位(bit),以及只能执行哪些整数操作。相比之下,动态语言(也称脚本语言)不会强迫你在使用变量之前声明其类型。
多年以来,通用动态语言一直都是Perl。Perl的功能极其强大并拥有丰富的库。不过,其语法实在让人不忍直视,而且在过去几年中,Perl的势头看起来已经被Python和Rudy盖过了。下面这个例子会输出一句Perl的俏皮话:
my $language = 4; print "Language $language: I am Perl, the camel of languages.\n";
Ruby是一种比较新的语言。它些许借鉴了Perl,其流行主要归结于Web开发框架Ruby on Rails。Ruby的很多应用领域和Python一样,究竟选择哪个更多属于个人品位问题,或是取决于特定应用所需的库。下面是一段Ruby代码:
language = 5 puts "Language #{language}: I am Ruby, ready and aglow."
由于方便与HTML结合,PHP在Web开发领域非常流行。但是,PHP自身有不少陷阱,并不适合作为Web之外的通用语言。下面是一段PHP代码:
<?PHP $language = 6; echo "Language $language: I am PHP, a language and palindrome.\n"; ?>
Go(或者Golang,如果你打算用谷歌搜索的话)是一种尝试兼顾效率和易用性的新生语言:
package main import "fmt" func main() { language := 7 fmt.Printf("Language %d: Hey, ho, let's Go!\n", language) }
时下C和C++的另一种替代语言是Rust:
fn main() { println!("Language {}: Rust here!", 8)
还有哪种语言没有提到?没错,Python。
language = 9 print(f"Language {language}: I am Python. What's for supper?")