Python 解释器
Python是一种基于解释器的语言。在Linux系统中,Python的可执行文件被安装在 /usr/bin/ 目录下。对于Windows系统,可执行文件(python.exe)位于安装文件夹中(例如 C:\python311 )。
本教程将教您 Python解释器的工作方式 在交互模式和脚本模式下。Python代码按照逐条语句的方式执行。Python解释器包含两个组件。翻译器检查语句的语法。如果语法正确,它会生成一个中间的字节码。然后有一个Python虚拟机将字节码转换成本地二进制并执行。下图展示了这个过程的机制:
Python解释器有交互模式和脚本模式。
Python解释器-交互模式
当从命令行终端启动时,没有任何额外选项,Python提示符 >>> 出现,Python解释器采用 REPL(读取,评估,打印,循环) 的原理工作。在Python提示符前输入的每个命令都会被读取,翻译和执行。一个典型的交互式会话如下。
>>> price = 100
>>> qty = 5
>>> ttl = price*qty
>>> ttl
500
>>> print ("Total = ", ttl)
Total = 500
要关闭交互会话,请输入换行字符(对于Linux来说是ctrl+D,对于Windows来说是ctrl+Z)。你也可以在Python提示符前面输入 quit() ,然后按Enter键返回操作系统提示符。
标准Python发行版附带的交互式shell没有像行编辑、历史搜索、自动补全等功能。你可以使用其他高级交互式解释器软件,比如 IPython 和 bpython 。
Python解释器 – 脚本模式
不必像在交互环境中一次输入和获取一条指令的结果,可以将一组指令保存在一个文本文件中,确保它具有 .py 扩展名,并将其作为Python命令的命令行参数。
使用任何文本编辑器(比如Linux上的vim或Windows上的记事本),将以下行保存为 prog.py 。
print ("My first program")
price = 100
qty = 5
ttl = price*qty
print ("Total = ", ttl)
当我们执行上面的程序时,它将产生以下结果:
C:\Users\Acer>python prog.py
My first program
Total = 500
请注意,尽管Python一次性执行整个脚本,但在内部仍按行执行。
如果是基于编译器的语言,如Java,源代码只有在整个代码没有错误时才会被转换为字节码。而在Python中,语句会一直执行,直到遇到第一个错误。
现在有意在上述代码中引入一个错误。
print ("My first program")
price = 100
qty = 5
ttl = prive*qty #Error in this statement
print ("Total = ", ttl)
请注意拼写错误的变量 私有 而不是 价格 。尝试像以前一样再次执行脚本−
C:\Users\Acer>python prog.py
My first program
Traceback (most recent call last):
File "C:\Python311\prog.py", line 4, in <module>
ttl = prive*qty
^^^^^
NameError: name 'prive' is not defined. Did you mean: 'price'?
请注意,在错误语句之前执行的语句,然后出现错误消息。因此,现在清楚了Python脚本是以解释方式执行的。
Python解释器 – 使用#!
除了像上面那样执行Python脚本外,脚本本身还可以在Linux中成为可自行执行的脚本,就像一个shell脚本一样。您需要在脚本的顶部添加一行 #! 。shebang指示使用哪个可执行文件来解释脚本中的Python语句。脚本的第一行以 #! 开头,后跟Python可执行文件的路径。
将prog.py脚本修改如下 –
#! /usr/bin/python3.11
print ("My first program")
price = 100
qty = 5
ttl = price*qty
print ("Total = ", ttl)
要将脚本标记为自执行,使用 chmod 命令。
$ chmod +x prog.py
现在您可以直接执行脚本,而无需将其作为命令行参数使用。
$ ./hello.py
交互式Python – IPython
IPython(代表着 交互式Python )是一个增强且强大的Python交互环境,与标准Python shell相比具有许多功能。IPython最初由Fernando Perez于2001年开发。
IPython具有以下重要特点−
- IPython的对象内省功能可以在运行时检查对象的属性。
-
它的语法高亮在识别语言元素(如关键字、变量等)方面非常有用。
-
交互历史记录被内部存储并可复现。
-
关键字、变量和函数名的Tab补全是其中最重要的功能之一。
-
IPython的魔术命令系统对于控制Python环境和执行操作系统任务非常有用。
-
它是Jupyter笔记本和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]: ttl = price*quantity
In [4]: ttl
Out[4]: 500
In [5]:
Tab自动完成是IPython提供的最有用的功能之一。在对象前面的点号后按下tab键,IPython会弹出相应的方法列表。 IPython通过在对象前面放置”?”来提供任何对象的信息(内省)。它包括文档字符串(docstring)、函数定义和类的构造函数的详细信息。例如,要探索上面定义的字符串对象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是Python、Julia、R等编程环境的基于web的界面。对于Python来说,它使用IPython作为主要的内核。