💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 2. Python 解释器 ### 2.1 调用解释器 在可用的机器上,Python解释器通常安装成/usr/local/bin/python;请将/usr/local/bin放在您的Unix shell搜索路径,以使得可以通过在shell中键入命令 ~~~ python ~~~ 来启动它。由于解释器放置的目录是一个安装选项,其它地方也是可能的;请与您本地的Python专家或系统管理员联系。(例如,/usr/local/python是另外一个常见的位置。) 在Windows机器上,Python的安装通常放在C:\Python27,当然你可以在运行安装程序时进行更改。你可以在一个DOS窗口的命令提示符下键入以下命令来把这个目录添加到路径中: ~~~ set path=%path%;C:\python27 ~~~ 主提示符下键入文件结束字符(Unix上是Control-D、Windows上是Control-Z)会导致解释器以0退出状态退出。如果无法正常工作,您可以通过键入以下命令退出解释器:quit()。 解释器的行编辑功能通常不是很复杂。在Unix上,不管是谁安装的,解释器可能已启用对GNU readline库的支持,该库添加了更详细的交互式编辑和历史记录功能。检查是否支持命令行编辑的最快的方式也许是对你的第一个Python提示符键入Control-P。如果它发出蜂鸣声,则有命令行编辑;请参阅附录[*交互式输入编辑和历史替代*](#)的有关快捷键的介绍。如果什么都没发生,或者显示^P,则命令行编辑不可用;你就只能够使用退格键删除当前行中的字符。 解释器有些像Unix shell:当调用时使用连接到一个tty设备作为标准输入,它交互地读取并执行命令;当用文件名参数或文件作为标准输入调用,它将读取并执行该文件中的*脚本*。 第二种启动解释器的方式是python-ccommand[arg]...,它会执行*command*中的语句,类似于shell的[*-c*](#)选项。因为Python语句经常包含空格或其他shell特殊字符,通常建议把全部*command*放在单引号里。 有些Python模块也是可执行的脚本。这些模块可以使用python-mmodule[arg]...直接调用,这和在命令行输入完整的路径名执行*module*的源文件是一样的。 有时使用一个脚本文件,能够在运行该脚本之后进入交互模式非常有用。这可以通过在脚本前面加上[*-i*](#)选项实现。 #### 2.1.1. 参数传递 调用解释器时,脚本名称和其他参数被转换成一个字符串列表并赋值给sys模块中的argv变量。你可以通过importsys访问此列表。列表的长度是至少是1;如果没有给出脚本和参数,sys.argv[0]是一个空字符串。当使用[*-c*](#)*command*时,sys.argv[0]被设置为'-c'。当使用[*-m*](#)*module*时,sys.argv[0]被设定为指定模块的全名。[*-c*](#)*command*或[*-m*](#)*module*后面的选项不会被Python解释器的选项处理机制解析,而是被保存在sys.argv中,供命令或模块使用。 #### 2.1.2. 交互模式 当命令从tty读取时,就说解释器在*交互模式*下。这种模式下解释器以*主提示符*提示下一个命令,主提示符通常为三个大于号(>>>);对于续行解释器以*从提示符*提示,默认为三个点(...)。在第一个提示符之前,解释器会打印出一条欢迎信息声明它的版本号和授权公告: ~~~ python Python 2.7 (#1, Feb 28 2010, 00:02:06) 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)可以取消输入,并返回到主提示符。[[1]](#)命令执行过程中输入中断符将引发[KeyboardInterrupt](# "exceptions.KeyboardInterrupt")异常,它可以被[try](#)语句截获。 #### 2.2.2. 可执行的Python脚本 在类BSD的Unix系统上,可以将Python脚本变成可直接执行的,就像shell脚本一样,通过放置一行 ~~~ #! /usr/bin/env python ~~~ (假定解释器在用户的PATH中)在脚本的开始并且给文件可执行的模式。#!必须是文件最开始的两个字符。在一些平台上,第一行必须以一个Unix风格的行结束符('\n')结束,不能是Windows的行结束符('\r\n')。注意,字符'#'在Python中用于起始一个注释。 通过**chmod**命令可以给予脚本可执行的模式或权限: ~~~ $ chmod +x myscript.py ~~~ 在Windows系统上,没有"可执行模式"的概念。Python安装程序会自动将.py文件与python.exe关联,双击Python文件将以脚本的方式运行它。扩展名也可以是.pyw,在这种情况下,通常出现的控制台窗口不会再显示了。 #### 2.2.3. 源程序的编码 在Python源文件中可以使用非ASCII编码。最好的方法是在#!行的后面再增加一行特殊的注释来定义源文件的编码: ~~~ # -*- coding: encoding -*- ~~~ 通过此声明,源文件中的所有字符将被视为由*encoding*编码,并且可以直接写由选中的编码方式编码的Unicode字符串字面量。在Python库参考手册的[codecs](# "codecs: Encode and decode data and streams.")小节中,可以找到所有可能的编码方式列表。 例如,若要写入包含欧元货币符号的 Unicode 字面量,可以使用ISO-8859-15 编码,其欧元符号的值为164 。此脚本中,以 ISO-8859-15 编码,保存时将打印的值 8364 (Unicode 代码点相应的欧元符号),然后退出: ~~~ # -*- coding: iso-8859-15 -*- currency = u"€" print ord(currency) ~~~ 如果你的编辑器支持保存为带有UTF-8*字节顺序标记*(也叫做BOM) 的UTF-8格式的文件,你可以使用这种功能而不用编码声明。IDLE如果设置了Options/General/Default Source Encoding/UTF-8 也支持此功能。注意,这种标记方法在旧的Python 版本中(2.2 及更早)是不能识别的,同样也不能被能够处理#!(只在Unix系统上使用)行的操作系统识别。 通过使用 UTF-8 编码(无论是BOM方式或者是编码声明方式),世界上大多数语言的字符可以在字符串字面量和注释中同时使用。在标识符中使用非 ASCII 字符是不支持的。若要正确显示所有这些字符,您的编辑器必须认识该文件是 UTF-8 编码,并且它必须使用支持文件中所有字符的字体。 #### 2.2.4. 交互式启动文件 当您以交互方式使用Python时,让解释器在每次启动时执行一些标准命令会变得非常方便。你可以通过设置环境变量[PYTHONSTARTUP](#)为包含你的启动命令的文件的名字。这类似于Unix shell的.profile功能。 这个文件只会在交互式会话时读取,当 Python 从脚本中读取命令时不会读取,当/dev/tty 在命令中明确指明时也不会读取 (尽管这种方式很像是交互方式)。它和交互式命令在相同的命名空间中执行,所以在交互式会话中,由它定义或引用的一切可以在解释器中不受限制地使用。您还可以在此文件中更改sys.ps1和sys.ps2 的提示符。 如果您想要从当前目录读取额外的启动文件,你可以在全局启动文件中使用这样的代码 ifos.path.isfile('.pythonrc.py'):execfile('.pythonrc.py')。如果你想要在脚本中使用启动文件,必须要在脚本中明确地写出: ~~~ import os filename = os.environ.get('PYTHONSTARTUP') if filename and os.path.isfile(filename): execfile(filename) ~~~ #### 2.2.5. 自定义模块 Python提供了两个钩子来定制化它:sitecustomize和usercustomize。要查看它如何工作,你首先需要找到你的用户site-packages目录。启动Python并运行下面的代码: ~~~ >>> import site >>> site.getusersitepackages() '/home/user/.local/lib/python2.7/site-packages' ~~~ 现在你可以在此目录下创建名为usercustomize.py的文件,并把任何你想要的东西放在里面。它将影响每个Python调用,除非启动时用[*-s*](#)选项来禁用自动导入。 sitecustomize的工作方式相同,但通常是由计算机的管理员在全局site-packages目录中创建,并在usercustomize之前导入。更多详细信息请参阅[site](# "site: Module responsible for site-specific configuration.")模块的文档。 脚注 | [[1]](#) | GNU Readline库的一个问题可能导致它不会发生。 | |-----|-----|