- 开胃菜
- 使用 Python 解释器
- 非正式介绍Python
- 深入流程控制
- 数据结构
- 模块
- 输入和输出
- 错误和异常
- 类
- 标准库的简明介绍
- 标准库的简明介绍(第二部分)
- 现在干什么?
- 交互式输入编辑及历史替代
- 浮点算术: 问题和限制
本章的pdf 版本下载: Python_Tutorial_zh-cn_liam0205.pdf
2.1. 调用 Python 解释器
Python 解释器通常安装在目标机器的 /usr/local/bin/
目录下. 将 /usr/local/bin
目录放进你的 Unix Shell 的搜索路径里, 确保它可以通过输入:
python3.2
启动. [1] 因为安装路径是可选的, 所以也可能安装在其它位置, 具体的你可以咨询当地 Python 导师或系统管理员. (例如, /usr/local/python
就是一个很常见的选择)
在 Windows 机器中, Python 通常安装在 C:\Python32
目录. 当然, 我们可以在运行安装程序的时候改变它. 需要把这个目录加入到我们的 Path 中的话, 可以像下面这样在 DOS 窗中输入命令行:
set path=%path%;C:\python32
输入一个文件结束符 ( UNIX 上是 Control-D , Windows 上是 Control-Z ) 解释器会以 0 值退出. 如果没有起作用, 你可以输入以下命令退出: quit()
.
解释器的行编辑功能并不复杂, 装在 UNIX 上的解释器可能需要 GNU readline 库支持, 这样就可以额外得到精巧的交互编辑和历史记录功能. 确认命令行编辑器支持能力 最方便的方式可能是在主提示符下输入 Control-P, 如果有嘟嘟声 (计算机扬声器), 说明你可以使用命令行编辑功能 (在 交互式输入编辑及历史替代 在快捷键的介绍). 如果什么也没有发声, 或者显示 ^P
, 说明命令行编辑功能不可用; 你将只能用退格键删除当前行的字符.
解释器的操作有些像 UNIX Shell: 使用终端设备作为标准输入来调用它时, 解释器交互地解读和执行命令, 通过文件名参数或以文件作为标准输入时, 它从文件中解读并执行脚本.
启动解释器的第二个方法是 python -c command [arg] ...
, 这种方法会执行 command 中的语句, 等同于 Shell 的 -c 选项. 因为 Python 语句中通常会包括空格之类的对 shell 有特殊含义的字符, 所以最好把整个 command 用单引号包起来.
有一些 Python 模块也可以当作脚本使用. 它们可以通过 python -m module [arg] ...
调用, 这如同在命令行中给出其完整文件名来运行一样.
使用脚本文件时, 经常会运行脚本然后进入交互模式. 这也可以通过在脚本之前加上 -i 参数来实现. (如果脚本来自标准输入, 就不能这样执行, 与前述提及原因一样. )
2.1.1. 参数传递
调用解释器时, 脚本名和附加参数传入一个名为 sys.argv 的字符串列表.
2.1.2. 交互模式
从 tty 读取命令时, 我们称解释器工作于 交互模式 ( interactive mode ). 这种模式下它通过*主提示符* (primary prompt*) 提示下一条命令, 主提示符通常为三个大于号 (>>>
); 而通过从提示符由(三个点标识 ...
组成)提示一条命令的续行. 在第一条命令之前, 解释器会打印欢迎信息, 版本号和授权提示:
$ python3.2
Python 3.2 (py3k, Sep 12 2011, 12:21:02) [GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. >>>
输入多行结构时就需要从属提示符了, 例如, 下面这个 if 语句:
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
… print(“Be careful not to fall off!”)
…
Be careful not to fall off!
2.2. 解释器及其环境
2.2.1. 错误处理
有错误发生时, 解释器会输出错误信息和栈跟踪. 交互模式下, 它返回到主提示符, 如果从文件输入执行, 它在打印栈跟踪后以非零状态退出. (在 try
语句中抛出并被 except
从句处理的异常不是这里所讲的错误). 一些非常致命的错误会导致非零状态下退出, 这通常由内部问题或内存溢出造成, 所有的错误信息都写入标准错误流; 命令中执行的普通输出写入标准输出.
在主提示符或从属提示符后输入中断符 (通常是 Control-C 或者 DEL) 就会取消当前输入, 回到主提示符. [2] 执行命令时输入一个中断符会抛出一个 KeyboardInterrupt
异常, 它可以被 try
语句截获.
2.2.2. 可执行的 Python 脚本
类 BSD 的 UNIX 系统中, Python 脚本可以像 Shell 脚本那样直接执行, 只要在脚本文件开头加一行文本来声明模式:
#! /usr/bin/env python3.2
(要先确认 Python 解释器存在于用户的 PATH
环境变量中). #!
这两个字符必须是文件的头两个字符. 在某些平台上, 第一行必须以 UNIX 风格的行结束符 ('\n'
) 结束, 不能用 Windows ('\r\n'
) 的行结束符. 注意 , '#'
用于 Python 一行注释的开始.
脚本可以用 chmod 命令指定可执行模式或权限:
$ chmod +x myscript.py
在 Windows 系统下, 没有 “可持行模式 (executable mode)” 的概念. Python 安装器会自动地把 .py
后缀的文件与 python.exe
绑定, 因此双击一个 Python 文件, 就可以把它作为脚本来运行. 扩展名也可以是 .pyw
, 这时工作台窗口会隐藏不被打开.
2.2.3. 源程序编码
默认情况下, Python 源码文件以 UTF-8 编码. 在这种编码下,世界上大多数语言的字符都可以用于, 字符串常量, 标识符, 以及注释 . 尽管标准库遵循一个所有可移植代码都应遵守的约定: 仅使用 ASCII 字符作为标识符, 这是所有可移植代码都应该遵守的约定.
要正确地显示所有这些字符, 你的编辑器一定要有能力辨认出是 UTF-8 编码, 还要使用一个支持所有文件中字符的字体.
为源文件选择一个另外的编码也是可行的. 为此, 要在 #!
行后面指定一个特殊的注释行, 以定义源码文件的编码:
# -*- coding: encoding -*-
有了这样的声明, 源文件中的所有字符都会被以 encoding 的编码来解读,而非是 UTF-8
在 Python 库参考的 codecs
一节可以找到所有可用的编码.
例如, 如果你使用的编辑器不支持 UTF-8 编码, 但是支持另一种称为 Windows-1252 的编码, 你可以在源码中写上:
# -*- coding: cp-1252 -*-
这样就可以在源码文件中使用 Windows-1252 字符集. 这个特殊的编码注释必须在代码文件的 第一或第二 行.
2.2.4. 交互式启动文件
交互式地使用 Python 解释器时, 我们可能需要在每次启动时执行一些命令. 为了做到这点, 你可以设置一个名为 PYTHONSTARTUP
的变量, 指向包含启动命令的文件. 这类似于 Unix Shell 的 .profile
文件.
这个文件只在交互式会话中才被读取, 当 Python 从脚本中读取命令或显式地以 /dev/tty
作为命令源时 (尽管它的行为很像是处在交互会话期) 则不会如此. 它与解释器执行的命令处在同一个命名空间, 所以由它定义或引用的一切可以在解释器中不受限制的使用. 你也可以在这个文件中改变 sys.ps1
和 sys.ps2
的值.
如果你想要在当前目录中执行额外的启动文件, 可以在全局启动文件中加入类似以下的代码: if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())
. 如果你想要在某个脚本中使用启动文件, 必须要在脚本中写入这样的语句:
import os
filename = os.environ.get(‘PYTHONSTARTUP’)
if filename and os.path.isfile(filename):
exec(open(filename).read())
2.2.5. 定制模块
Python 为你提供两个钩子 (hook) 来定制交互环境: sitecustomize
和 usercustomize
. 要知道它如何工作, 你需要先找到你的 user site-package 目录的位置. 打开 Python 并运行这段代码:
>>> import site
>>> site.getusersitepackages()
‘/home/user/.local/lib/python3.2/site-packages’
现在你可以在那个目录下创建一个名为 usercustomize.py
的文件, 并在里面放置任何你想放的东西. 它将影响到每一次 Python 的调用, 除非使用了 -s
选项来禁用了自动导入功能.
sitecustomize
以同样的方式工作, 但通常由该计算机的管理员在全局 site-packages 目录下创建, 并且在 usercustomize
之前被导入. 参看 site
模块的文档获取更多细节.
Footnotes
[1] | 在 Unix, Python 3.x 解释器默认不使用可执行文件名 python 安装, 所以同时安装 Python 2.x 并不会发生冲突. |
[2] | 一个GNU Readline 包的问题可能会禁止这个功能. |