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 不具备行编辑、历史搜索、自动完成等功能。您可以使用其他高级交互式解释器软件(例如IPythonbpython )来获得附加功能。

Python 解释器 - 脚本模式

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

使用任何文本编辑器(例如 Linux 上的 vim 或 Windows 上的记事本)将以下行保存为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 #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(代表Interactive Python)是一个增强且强大的 Python 交互式环境,与标准 Python shell 相比具有许多功能。IPython 最初由 Fernando Perez 于 2001 年开发。

IPython 具有以下重要特征 -

  • IPython 的对象自省能力可以在运行时检查对象的属性。

  • 事实证明,它的语法突出显示对于识别关键字、变量等语言元素非常有用。

  • 交互历史记录在内部存储并且可以复制。

  • 关键字、变量和函数名称的制表符补全是最重要的功能之一。

  • 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] 出现在输出出现之前。

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作为其主要内核。