本文主要介绍 Python 编程语言的相关知识。

1 概述

Python 是一种面向对象的、解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于 1989 年发明,第一个公开发行版发行于 1991 年。

Python 是纯粹的自由软件,源代码和解释器 CPython 遵循 GPL(GNU General Public License) 协议。

Python 语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进

Python 具有丰富和强大的库。

Python 常被昵称为胶水语言(glue language),因为它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起,常见的一种应用情形是,使用 Python 快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分用更合适的语言改写,比如 3D 游戏中的图形渲染模块,对性能要求特别高,就可以用 C/C++ 重写,而后封装为 Python 可以调用的扩展类库。需要注意的是,在使用扩展类库时,可能需要考虑平台问题,某些扩展类库可能不提供跨平台的实现。

2 语言风格

Python 在设计上坚持了清晰划一的风格,这使得 Python 成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言

设计者在使用 Python 进行代码开发时总的指导思想是:对于一个特定的问题,只要有一种最好的方法来解决就够了,这在由 Tim Peters 写的 Python 格言(称为“The Zen of Python”)里面表述为:There should be one -- and preferably only one -- obvious way to do it. Python 的这个思想正好和 Perl 语言(另一种功能类似的高级动态语言)的中心思想 TMTOWTDI(There's More Than One Way To Do It)完全相反。

Python 的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如 if 语句的下一行不向右缩进)都不能通过编译,其中很重要的一项就是 Python 的缩进规则。

一个和其他大多数语言(如 C 语言)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而 C 语言是用一对花括号“{}”来明确地指定模块的边界的,与字符的位置无关)。Python 的这一规则曾经引起过争议,因为自从 C 语言这类的语言诞生后,使得语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们使用缩进规则(包括 if,for 和函数定义等所有需要使用模块的地方),Python 确实使得程序更加清晰和美观。

3 设计定位

Python 的设计哲学是“优雅”、“明确”、“简单”。

因此,Perl 语言中“总是有多种方法来做同一件事”的理念,在 Python 开发者中通常是难以忍受的。Python 开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。

在设计 Python 语言时,如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python 源代码通常被认为比 Perl 具备更好的可读性,并且能够支撑大规模的软件开发。

Python 准则被称为 Python 格言,在 Python 解释器内运行“import this”可以获得完整的格言列表。

Python 是完全面向对象的语言,函数、模块、数字、字符串都是对象,并且 Python 完全支持继承、重载、派生、多继承,这有益于增强源代码的复用性。另外,Python 支持重载运算符和动态类型。

虽然 Python 可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划(例如 Zope、Mnet、BitTorrent 和 Google)也广泛地使用它。Python 的支持者喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言(如 shellscript、VBScript)等只能处理简单任务的编程语言,这些脚本语言并不能与 Python 相提并论。

Python 本身被设计为可扩充的,并非所有的特性和功能都集成到语言核心。Python 提供了丰富的 API 和工具,以便程序员能够轻松地使用 C、C++、Cython 来编写扩充模块。

Python 编译器本身也可以被集成到其它需要脚本语言的程序内,因此,很多人使用 Python 将其他语言编写的程序进行集成和封装。在 Google 内部的很多项目,例如 Google Engine,先使用 C++ 编写性能要求极高的部分,然后用 Python 或 Java/Go 调用相应的模块。即,在操控硬件的场合使用 C++,在快速开发时候使用 Python。

4 Python执行

Python 在执行时,首先会将 .py 文件中的源代码编译成 Python 的字节码(byte code),然后再由 Python 虚拟机(Python Virtual Machine)来执行这些编译好的字节码,这种机制的基本思想跟 Java 和 .NET 是一致的。

不过,Python 虚拟机与 Java 或 .NET 的虚拟机不同,Python 的虚拟机是一种更高级的虚拟机,这里的“高级”并不是通常意义上的高级:不是说 Python 的虚拟机比 Java 或 .NET 的功能更强大,而是说与 Java 或 .NET 相比,Python 的虚拟机距离真实机器的距离更远,或者说,Python 的虚拟机是一种抽象层次更高的虚拟机。

基于 C 语言的 Python 编译出的字节码文件,通常是 .pyc 格式。

此外,Python 还可以以交互模式运行,比如主流操作系统 Unix/Linux、Mac、Windows,都可以在命令模式下直接运行 Python 交互环境,直接下达操作指令实现交互操作。

5 基本语法

5.1 缩进

Python 开发者有意让违反了缩进规则的程序不能通过编译,以此来强制使程序员养成良好的编程习惯。

Python 语言利用缩进表示语句块的开始和退出(即“Off-side”规则),而不同于其他语言使用花括号或者某种关键字。

增加缩进表示语句块的开始,而减少缩进则表示语句块的退出,缩进成为了语法的一部分。例如如下的 Python 语句:

if 100 == score:
    print("good.这条语句在if语句块之内")
print("这条语句在if语句块之外")

根据 PEP 的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自定义空格数,但是要满足每级缩进间空格数相等)。虽然使用 Tab 字符和其它数目的空格也可以编译通过,但不符合编码规范。支持 Tab 字符和其它数目的空格仅仅是为兼容很旧的Python程序和某些有问题的编辑程序。