Python 是一种基于解释器的语言。在 Linux 系统中,Python 的可执行文件安装在 /usr/bin/
目录中。对于 Windows,可执行文件 (python.exe
) 位于安装文件夹中(例如 C:\python311
)。
本教程将教您 Python 解释器如何在交互和脚本模式下工作。Python 代码通过一次一个语句的方法执行。Python 解释器有两个组件。翻译器检查语句的语法。如果发现正确,它会生成中间字节码。然后有一个 Python 虚拟机将字节码转换为本机二进制并执行它。下图说明了该机制:
Python 解释器 - 交互模式
当从命令行终端启动时,无需任何附加选项,Python 提示符 >>>
会出现,Python 解释器按照 REPL(读取、求值、打印、循环)的原理工作。在 Python 提示符前输入的每个命令都会被读取、翻译和执行。典型的交互式会话如下:
>>> price = 100
>>> qty = 5
>>> total = price * qty
>>> total
500
>>> print("Total = ", total)
Total = 500
要关闭交互式会话,请输入行尾字符(Linux 为 Ctrl+D
,Windows 为 Ctrl+Z
)。您也可以在 Python 提示符前输入 quit()
,然后按 Enter 返回 OS 提示符。
>>> quit()
$
标准 Python 发行版提供的交互式 shell 不具备行编辑、历史搜索、自动完成等功能。您可以使用其他高级交互式解释器软件(如 IPython 和 bpython)来获得附加功能。
Python 解释器 - 脚本模式
我们可以将一组指令保存在文本文件中,确保其具有 .py
扩展名,并使用该名称作为 Python 命令的命令行参数,而不是像在交互式环境中那样一次输入并获取一条指令的结果。
使用任何文本编辑器(例如 Linux 上的 Vim 或 Windows 上的 Notepad)将以下行保存为 prog.py
。
print("My first program")
price = 100
qty = 5
total = price * qty
print("Total =", total)
当我们在 Windows 机器上执行上述程序时,它将产生以下结果:
C:\Users\Acer>python prog.py
My first program
Total = 500
请注意,尽管 Python 一次执行整个脚本,但在内部它仍然以逐行方式执行。
对于任何基于编译器的语言(例如 Java),除非整个代码没有错误,否则源代码不会转换为字节码。另一方面,在 Python 中,语句会一直执行,直到遇到第一次错误。
让我们在上面的代码中故意引入一个错误。
print("My first program")
price = 100
qty = 5
total = prive * qty
print("Total =", total)
注意,变量 prive
拼写错误,而不是 price
。尝试像之前一样再次执行脚本:
C:\Users\Acer>python prog.py
My first program
Traceback (most recent call last):
File "C:\Python311\prog.py", line 4, in <module>
total = prive * qty
^^^^^
NameError: name 'prive' is not defined. Did you mean: 'price'?
注意,错误语句之前的语句被执行,然后出现错误消息。因此现在很明显,Python 脚本是以解释方式执行的。
Python 解释器 - 使用 Shebang #!
除了像上面一样执行 Python 脚本之外,脚本本身还可以在 Linux 中自执行,就像 shell 脚本一样。您必须在脚本顶部添加一个 shebang 行。Shebang 指示哪个可执行文件用于解释脚本中的 Python 语句。脚本的第一行以 #!
开头,后面是 Python 可执行文件的路径。
修改 prog.py
脚本如下:
print("My first program")
price = 100
qty = 5
total = price * qty
print("Total =", total)
要将脚本标记为可自执行,请使用 chmod
命令:
$ chmod +x prog.py
您现在可以直接执行脚本,而无需将其用作命令行参数:
$ ./hello.py
交互式 Python —— IPython
IPython(代表交互式 Python)是一个增强的、功能强大的 Python 交互式环境,与标准 Python shell 相比具有许多功能。IPython 最初由 Fernando Perez 于 2001 年开发。
IPython 具有以下重要特点:
-
IPython 的对象自省能力可以在运行时检查对象的属性。
-
它的语法高亮功能被证明有助于识别关键字、变量等语言元素。
-
-
关键字、变量和函数名称的制表符补全是最重要的功能之一。
-
IPython 的 Magic 命令系统对于控制 Python 环境和执行 OS 任务很有用。
-
它是 Jupyter 笔记本和 Jupyter 项目其他前端工具的主要内核。
使用 pip 安装程序实用程序安装 IPython:
pip3 install ipython
从命令行启动 IPython:
C:\Users\Acer>ipython
Python 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
与标准解释器中的常规 >>>
提示不同,您将注意到两个主要的 IPython 提示符,如下所示:
In [1]: price = 100
In [2]: quantity = 5
In [3]: total = price * quantity
In [4]: total
Out[4]: 500
Tab 补全是 IPython 提供的最有用的增强功能之一。当您在对象前面的点后按下 Tab 键时,IPython 会弹出相应的方法列表。
IPython 通过在对象前面加上 ?
来提供任何对象的信息(自省)。它包括类的文档字符串、函数定义和构造函数详细信息。例如,要探索上面定义的字符串对象 var
,请在输入提示中输入 var?
。
In [5]: var = "Hello World"
In [6]: var?
Type: str
String form: Hello World
Length: 11
Docstring:
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
IPython 的魔法函数非常强大。行魔法让你可以在 IPython 中运行 DOS 命令。让我们在 IPython 控制台中运行 dir
命令:
In [8]: !dir *.exe
Volume in drive F has no label.
Volume Serial Number is E20D-C4B9
Directory of F:\Python311
07-02-2023 16:55 103,192 python.exe
07-02-2023 16:55 101,656 pythonw.exe
2 File(s) 204,848 bytes
0 Dir(s) 105,260,306,432 bytes free
Jupyter Notebook 是一个基于 Web 的界面,可用于 Python、Julia、R 等多种编程环境。对于 Python,它使用 IPython 作为其主要内核。