
1.2 Python编程基础
1.2.1 Python交互式解释器
打开shell并键入以下命令,从命令行启动Python交互式解释器:

你将看到以下提示(或类似内容):

现在,在提示符处键入表达式2+7
:

Python显示如下结果:

按<ctrl+d>键退出Python shell。
你可以在命令行前添加单词“python”来启动任何Python脚本。如果你有一个包含Python命令的Python脚本myscript.py
,请按以下方式启动该脚本:

举一个简单的例子,假设Python脚本myscript.py包含以下Python代码:

启动上面的Python脚本时,你将看到以下输出:

1.2.2 Python基础语法
1. Python标识符
Python标识符是变量、函数、类、模块或其他Python对象的名称,有效的标识符应符合以下规则:
- 以字母A到Z、a到z或者下划线(_)开头。
- 零个或多个字母、下划线和数字(0到9)。
注意:Python标识符不能包含@、$
和%之类的字符。
Python语言区分大小写,因此Python中的Abc和abc不同。
此外,Python具有以下命名惯例:
- 类名以大写字母开头,所有其他标识符以小写字母开头。
- 初始下划线用于私有标识符。
- 两个初始下划线用于强私有标识符。
Python标识符中,若有两个初始下划线和两个末尾下划线字符,则表示语言定义的特殊名称。
2. 行、缩进和多行
与其他编程语言(如Java或Objective-C)不同,Python在代码块中使用缩进而不是大括号。缩进在代码块中必须保持一致,如下所示:

Python中的多行语句换行结尾时可以使用换行符或反斜杠(“\”)字符,如下所示:

显然这里可以将x1
、x2
和x3
放在同一行上,并无必要将三行分开。但如果需要添加一组超过一行的变量,则可以使用换行功能。
你可以使用分号(“;”)分隔每条语句,从而在一行中定义多个语句,如下所示:

上述代码片段的输出如下所示:

注意:在Python中不鼓励使用分号和连续字符。
3. Python中的引用和注释
Python允许对字符串文字添加单引号(')、双引号(")和三引号('''或"""),只要它们在字符串的开头和结尾可以相互匹配上。对跨越多行的字符串可以使用三引号。以下示例都是合法的Python字符串:

以字母“r”(代表“raw”)开头的字符串文字将所有内容视为文字字符,并“转义”了元字符的含义,如下所示:

以上代码块的输出如下所示:

你可以将单引号嵌入一对双引号中(反之亦然),用来显示单引号或双引号。另一种方法是,在单引号或双引号前加上反斜杠(“\”)字符。以下代码块说明了这点:

以上代码块的输出如下所示:

不在字符串文字中的井号(#)是注释开始的标志。#后面直到该行结束的所有字符都是注释的一部分(会被Python解释器忽略)。考虑下列代码块:

结果如下所示:

注释可以和代码语句在同一行:

也可注释多行,如下所示:

Python中的空白行是仅包含空格或者注释(或两者兼有)的行。
1.2.3 以模块形式保存代码
前面介绍了如何从命令行启动Python解释器,然后输入Python命令。但在Python解释器中输入的所有内容仅对当前会话有效,如果退出解释器,再次启动时,之前的定义将不再有效。幸运的是,Python允许你将代码存储在文本文件中。
Python中的模块是一个包含Python语句的文本文件。前面介绍了Python解释器如何检验对当前会话有效的代码片段。如果要保留代码片段和定义,请将其存于文本文件中,以便在Python解释器之外执行该代码。
首次导入模块时,Python中最外面的语句从上到下执行,然后对变量和函数进行设置。
Python模块可以直接从命令行运行,如下所示:

举个例子,将下面两个语句放在一个名为First.py的文本文件中:

输入以下命令:

上述命令的输出为3,和前面从Python解释器执行的结果相同。
当直接运行Python模块时,特殊变量__name__
会被设置为__main__
。你会经常在Python模块中看到类似下面的代码:

上述代码片段用来让Python判断,是从命令行启动Python模块,还是将其导入另一个Python模块。
1.2.4 Python中的一些标准模块
Python标准库提供了许多可以简化Python脚本的模块。可以访问如下网址查看标准库模块的列表:
一些最重要的Python模块包括cgi
、math
、os
、pickle
、random
、re
、socket
、sys
、time
和urllib
。
本书中的代码示例使用模块math
、os
、random
、re
、socket
、sys
、time
和urllib
。你需要导入这些模块才能在自己的代码中使用它们。例如,下面这个代码块说明了如何导入4个标准Python模块:

本书中的代码示例导入了一个或多个上述模块,以及其他的Python模块。
1.2.5 help()
和dir()
函数
在网上搜索Python相关的主题会得到很多有用信息的链接,或者也可以查看Python官方文档:docs.python.org
此外,Python提供了可以从Python解释器访问的help()
和dir()
函数。help()
函数返回解释文档,dir()
函数返回定义的符号。
例如,如果输入help(sys)
,则将看到sys
模块的文档,而dir(sys)
显示已定义符号的列表。
在Python解释器中输入以下命令,可以显示Python中与字符串相关的方法:

上述命令可得到如下输出:

请注意,虽然dir()
没有列出内置函数和变量的名称,但是你可以从标准模块__builtin__
获取这些信息,该模块会自动以__builtins__
的名称导入:

下面这个命令说明如何获取某个函数的更多信息:

该命令的输出如下:

在需要有关特定函数或模块的其他信息时,请上网查阅文档,并尝试使用help()
和dir()
。
1.2.6 编译时和运行时的代码检查
Python支持一些编译时的代码检查,但大部分检查(如类型、名称等)都要推迟到代码执行的时候。因此,如果Python代码引用了一个不存在的用户自定义函数,该代码仍然会成功编译。事实上,仅当代码执行路径引用了不存在的函数时,该代码才会因异常而失败。
简单举例,请考虑下面的Python函数myFunc
,该函数引用了一个不存在的函数DoesNotExist
:

仅当myFunc
函数传递的值为3时,上述代码才会失败,之后引起Python报错。
在第2章中,你将学习如何定义和调用用户自定义的函数,并了解Python中局部变量和全局变量之间的区别。
现在你已经了解了一些基本概念(例如,如何使用Python解释器)以及如何启动自定义Python模块,1.3节将讨论Python中的基本数据类型。