Python 解释器及其模式



Python 解释器

Python 是一种基于解释器的语言。在 Linux 系统中,Python 的可执行文件安装在 /usr/bin/ 目录中。对于 Windows,可执行文件 (python.exe) 位于安装文件夹(例如 C:\python311)中。

本教程将教您 Python 解释器如何在交互式和脚本化模式下工作。Python 代码通过一次一个语句方法执行。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 键返回到操作系统提示符。


>>> quit()

$

标准 Python 发行版提供的交互式 shell 没有配备行编辑、历史搜索、自动完成等功能。您可以使用其他高级交互式解释器软件(例如 IPython bpython)来获得其他功能。

Python 解释器 - 脚本模式

与在交互式环境中一次输入和获取一条指令的结果不同,可以将一组指令保存在文本文件中,确保其具有.py扩展名,并使用名称作为 Python 命令的命令行参数。

将以下行另存为 prog.py,使用任何文本编辑器,例如 Linux 上的 vim 或 Windows 上的记事本。


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 #Error in this statement
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 脚本如下:


#! /usr/bin/python3.11

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 的对象自检功能,用于在运行时检查对象的属性。
  • 事实证明,它的语法高亮在识别关键字、变量等语言元素方面很有用。
  • 交互历史记录在内部存储,可以复制。
  • 关键字、变量和函数名称的 Tab 自动补全是最重要的功能之一。
  • IPython 的 Magic 命令系统对于控制 Python 环境和执行操作系统任务非常有用。
  • 它是 Jupyter notebook 和 Project 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] 出现在任何输入表达式之前。
  • Out[1]出现在 Output 出现之前。

In [1]: price = 100
In [2]: quantity = 5
In [3]: total = price*quantity
In [4]: total
Out[4]: 500
In [5]:

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 的魔术功能非常强大。Line magics 允许您在 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 作为其主要内核。