Python 解释器及其模式



Python 解释器

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

本教程将教你Python 解释器如何在交互模式和脚本模式下工作。Python 代码一次执行一条语句。Python 解释器有两个组件。翻译器检查语句的语法。如果正确,它会生成中间字节码。然后有一个 Python 虚拟机将字节码转换为原生二进制代码并执行它。下图说明了该机制。

Python Interpreter

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脚本外,该脚本本身也可以像shell脚本一样在Linux中自执行。您必须在脚本顶部添加一行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 的对象自省能力,可以在运行时检查对象的属性。

  • 其语法高亮显示功能有助于识别语言元素,例如关键字、变量等。

  • 交互历史会被内部存储并可以重现。

  • 关键字、变量和函数名的Tab自动补全是最重要的特性之一。

  • IPython的魔法命令系统可用于控制Python环境和执行操作系统任务。

  • 它是Jupyter Notebook和其他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的魔法函数非常强大。行魔法允许您在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作为其主要内核。

广告