Python探索之旅 | 第一部分第三课:初识Python的解释器
作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:https://www.jianshu.com/p/a34eaffcc420
《Python探索之旅》全系列
内容简介
- 前言
- Python 的解释器
- Python 解释器的种类
- 做一点数学运算
- 总结
- 第一部分第三课预告
1. 前言
上一课是 Python探索之旅 | 第一部分第二课:安装Python和Python的常用开发软件 。
经过第一课的理论概念和第二课的 Python 开发环境安装之后,我们是时候来了解一下 Python 的解释器了。
即使这一课的一些小测试看似没什么了不起的,但你却可以借此对 Python 的语法有一个初步概念。我强烈建议你循序渐进地跟着我们动手练习,尤其是如果 Python 是你的第一门编程语言的话。
和任何编程语言一样,Python 具有清晰的语法:你不能随便向 Python 发送任何信息。我们将看到 Python 可以接收什么,不可以接收什么。
2. Python 的解释器
上一课,我们在最后用 PyCharm 创建了一个 Python 的项目,并且创建了我们的第一个 Python 文件(hello_python.py
),然后用项目配置的 Python 解释器(就是我们安装的 Python 中自带的解释器。例如我们上一课在 Windows 中安装的 Python 解释器的路径是在 C:\Program Files\Python37\python.exe
)来运行此 Python 文件,输出了:
Hello Python
像 PyCharm 这样的 IDE(集成开发环境)已经把各种开发工具(代码编辑器,解释器,编译器,调试器,等等)融合在一起了。我们使用 IDE 确实可以大大加快开发速度,但不能帮助我们理解编程的一些原理。
顺便一提:强大的 Visual Studio Code
对了,顺便一提,现在开发 Python,除了 PyCharm 这个强大的 IDE,你也可以使用 Visual Studio Code(简称 VS Code)这个微软开源的代码编辑器。
虽说 VS Code 本身是一个代码编辑器,但是它丰富的插件却可以将其变成一个不俗的 IDE。VS Code 跨平台(在 Windows,Linux 和 macOS 中都可以运行),体积小,速度快,现在已经成为了很多开发者的最爱。
如果你不想安装 JetBrains 家的比较大型的 IDE,也可以试试 VS Code。
VS Code 的官网是 https://code.visualstudio.com 。下载后安装非常简单,就和安装普通软件没什么区别。
打开 VS Code 后,针对某种编程语言例如 Python,只需要安装对应的官方插件(由微软开发),即可运行和调试该语言,也就是摇身一变成为该语言的 IDE 了。
例如我在 VS Code 中安装了微软官方的 Python 插件。
然后,我在 VS Code 中创建一个文件,就叫 hello_python.py
,和上一课在 PyCharm 中创建的文件同名。
在 hello_python.py
中写入 print("Hello Python")
。运行此 Python 文件,就得到和在 PyCharm 中一样的输出:
Hello Python
这些年微软自从 萨提亚·纳德拉(Satya Nadella)担任 CEO 之后,逐渐拥抱开源,确实为互联网领域做出了不少贡献。
当然了,我们这门课程还是会使用 PyCharm 作为开发工具。我介绍 VS Code,主要是为大家提供更多的可能性。
好了,说回我们的 Python 解释器。
我们之前说过,Python 是解释型语言,Python 文件要被解释器解释执行。
当然了,其实 Python 也和 Java 类似,是先编译后解释的语言。Python 的源代码会先被编译成字节码(ByteCode)文件(.pyc 文件,类似 Java 的 .class 文件),字节码文件再被解释执行。
这块知识可能对于新手来说有点难理解。暂时你就记住 Python 需要一个解释器来执行也够了。
解释器的英语单词是 interpreter。
我们来看一下在三大主流操作系统中,如何调出(或称运行)Python 的解释器。
在 Windows 中
我们之前安装完 Python 之后,在 Windows 的开始菜单中就有了一个 Python 文件夹。
点击上图中红框标出的那个 Python 3.7 (64-bit)
,就以 Console(控制台)的形式打开 Python 的解释器,打开之后就进入了交互模式(interactive mode)。
可以看到,Python 解释器运行在交互模式的时候,最开头是 Python 的欢迎信息,例如版本号(这里是 3.7.8),版权声明,等等。
你可以看到有一个 >>>
的符号,这是它的主提示符(primary prompt),提示输入下一条指令。你可以在 >>>
后面输入指令,按下回车,就会由 Python 解释器来执行指令。
Python 的解释器是 Python 的一大优势,很方便我们进行一些测试。其他语言如 C语言,Java 和 C++ 这些编译型语言,可能没有这么方便测试代码的方式。
除了这种调出 Python 解释器的方式,我们还可以用 Windows 的命令提示符来运行 Python 解释器。
Windows 的命令提示符通常也被称为 CMD。用快捷键【Windows键 + r】,然后输入 cmd
,再回车,就可以打开命令提示符。在命令提示符中输入 python
,就运行了 Python 的解释器。
要退出 Python 的解释器,我们可以输入 quit()
或 exit()
,再按下回车。
在 Linux 中
之前我们在 CentOS 这个 Linux 发行版中演示了如何安装 Python 最新稳定版。
一旦你在 Linux 中安装了 Python,那么它会自动为你创建一个到 Python 解释器的链接,例如 python 3.x
(x 是次版本号。例如 Python 3.7.8,那么它的次版本号就是 7)。
我们之前安装的是 Python 3.7.8 这个最新稳定版。因此,我们先打开 Linux 的 Terminal(终端),
在终端中输入 python3.7
(因为我们安装的是 Python 3.7.8),可以看到 Python 的解释器(交互模式)就被运行起来了:
在 Linux 中,要退出 Python 的解释器,可以输入 quit()
或 exit()
,再按下回车。此外,我们也可以用快捷键 Ctrl + d。
在 macOS 中
在 macOS 中,Python 一般是被安装到 Applications(应用程序)的目录中。依次点击 “前往” -> “应用程序”(也可以直接用快捷键 Cmd + Shift + a)。
点击“应用程序”,进入应用程序的文件夹。可以看到,Python 3.7.8 创建了一个文件夹,名叫 Python 3.7
。
我们进入 Python 3.7
这个文件夹。可以看到以下内容:
我们运行那个 IDLE(Integrated Development and Learning Environment 的缩写,表示“集成开发和学习环境”。IDLE 具备基本的 IDE 的功能,是非商业 Python 开发的不错的选择)。
在 macOS 下,除了用 IDLE,我们也可以在 Terminal(终端)中运行 Python 的解释器(交互模式)。
macOS 下的 Terminal,位于“前往” -> “实用工具”(也可以直接用快捷键 Cmd + Shift + u)。当然了,你也可以直接在 Spotlight(聚焦搜索)中直接输入 terminal
来打开。
打开 Terminal 后,输入 python3.7
(因为我们安装的是 Python 3.7.8),可以看到 Python 的解释器(交互模式)就被运行起来了。
在 macOS 中,要退出 Python 的解释器,可以输入 quit()
或 exit()
,再按下回车。此外,我们也可以用快捷键 Ctrl + d。
Python 解释器吃什么?
我们已经演示了在三大主流操作系统中如何运行 Python 的解释器。那么,Python 的解释器到底吃什么(就是它可以接受什么命令)呢?
正如我们所说的那样,编程语言遵循清晰的语法。你不可能期望 Python 的解释器能理解以下内容:“亲爱的 Python 解释器啊,我希望你为我编写一款出色的 3D 游戏!”
目前来说,我们还办不到这一点。多年以后,也许可行。
因此,如果你在 Python 解释器的命令提示符后面输入某些内容,它很可能会清楚而坚定地告诉你:“我完全没有听懂你在说什么。”
例如,如果输入 First test with Python
(表示“用Python进行的第一次测试”),则会得到以下结果:
是的,Python 解释器会说英语。对于绝大多数编程语言,你输入的命令也是用英语写的。
不过,如果你输入的命令不符合 Python 的语法,那么就像以前英语老师会跟你说“你的英语语法用错了”一样,Python 的解释器也会以类似的方式通知你:SyntaxError: invalid syntax
(表示“语法错误:无效的语法”)。
很清楚不是吗?你输入的内容是 Python 解释器所无法理解的。不过,它并没有“生气”,因为它又为你显示了 >>>
这个命令提示符,表明它已准备好接受你的“再一次打击”。
3. Python 解释器的种类
当我们编写 Python 代码时,我们会创建一个以 .py
为扩展名的文件,在其中写入 Python 的代码。要运行代码,就需要 Python 解释器去执行这个 .py
文件。
Python 语言是开源的,所以理论上,只要水平够好,任何人都可以编写 Python 解释器来执行 Python 代码。实际上,确实存在多种 Python 解释器。
CPython
我们从 Python 的官方网站 https://www.python.org 下载并安装好 Python 后,我们就获得了一个官方版本的解释器:CPython。
CPython 这个解释器是用 C语言开发的(如果你要学习 C语言,可以参看我的《C语言探索之旅》 系列教程)。
Python 之父在编写 Python 语言时,最开始也是用 C语言的。在命令行下运行 python
启动的就是 CPython 解释器。
CPython 是使用最广的 Python 解释器。我们的课程的代码都会在 CPython 下执行。
CPython 解释执行 Python 代码的原理,简单来说是像下面这样的:
- CPython 将 Python 代码编译为 ByteCode(字节码)。
- CPython 解释器中的虚拟机执行这些字节码。
所以,在这一点上,Python 和 Java 还是比较像的。
Jython
Jython 是运行在 Java 平台上的 Python 解释器,可以把 Python 代码编译成 Java 字节码执行。
IronPython
IronPython 和 Jython 类似。IronPython 是运行在微软的 .Net 平台上的 Python 解释器,可以把 Python 的代码编译成 .Net 的字节码。
类似的还有如 RubyPython,Brython,等等。可见下表:
实现 | 虚拟机 | 兼容的语言 |
---|---|---|
CPython | CPython VM | C |
Jython | JVM | Java |
IronPython | CLR | C# |
RubyPython | Ruby VM | Ruby |
Brython | JavaScript 引擎(例如:V8) | JavaScript |
IPython
IPython 是基于 CPython 之上的一个交互式解释器。IPython 在交互方式上比 CPython 有所增强,但是执行 Python 代码的原理和 CPython 是一样的。好比很多浏览器虽然外观不同,但内核其实都是调用了 Chromium。
我们之后的课程会使用到的 Jupyter Notebook 就使用到了 IPython。Jupyter Notebook 以前是叫 IPython Notebook 的。
CPython 用 >>>
作为提示符,IPython 用 In [序号]:
作为提示符。
PyPy
PyPy 是另一个 Python 解释器,它的目标是执行速度。PyPy 采用 JIT(Just-In-Time,表示“即时”)编译技术,对 Python 代码进行动态编译,可以显著提高 Python 代码的执行速度。Java 的 HotSpot 虚拟机也使用到了 JIT 技术。
绝大部分 Python 代码都可以在 PyPy 下运行,但是 PyPy 和 CPython 有一些不同,相同的 Python 代码在两种解释器下执行可能会有不同的结果。如果你的代码要在 PyPy 下执行,需要了解 PyPy和 CPython 的不同点:https://doc.pypy.org/en/latest/cpython_differences.html 。
4. 做一点数学运算
我们用 Python 的解释器来做一些运算。这些运算是比较简单的,不过,我认为这是帮助你逐步了解 Python 语法的好方法。
输入一个数字
我们可以在 Python 解释器中输入一个数字,例如 7
这个整数,然后按下回车。
可以看到,没有什么特别的。我们输入一个数字,Python 解释器将其原样输出。
但是,这种简单的返回表明 Python 解释器正确理解了你的输入,并且你的输入符合其语法。
同样,你也可以输入浮点数,例如我们输入 7.2
。
不用说,我们也可以输入负数,例如我们输入 -1.5
。
常用的运算
好了,是时候学习如何使用 Python 的主要运算符了。大部分时候,这些运算符已经足够满足我们用 Python 进行的计算了。
加、减、乘、除
为了执行这些基本运算,我们需要分别使用符号 +
(加),-
(减),*
(乘) 和 /
(除)。
为什么最后一个结果(3.12 + 2.18
的结果)是一个近似值呢?3.12 + 2.18
不是应该等于 5.3
吗?为什么它输出的却是 5.300000000000001
呢?
其实,这和 Python 没有太多关系,问题主要出在你的计算机将浮点数写入内存的方式。这也是为什么在编程中,我们尽可能多地使用整数的原因。
不过,误差是很小的,不会对计算产生太多实际影响。需要非常高精度计算的应用程序会试图通过其他方法克服这些缺陷,但是一般来说我们不必在意。
你可以用同样的方式测试 减法,乘法和除法。
整除和取模运算
如果你测试除法,你将发现结果是浮点数。
例如,我们输入 10 / 2
和 10 / 3
。
还有其他两个运算符,可以让我们获得整数除法的结果以及除法的剩余部分。
第一个运算符是 //
(两个斜杠),这样就可以得到除法的整数部分。
例如,我们输入 10 // 3
。
第二个运算符是被称为“取模”的运算符 %
,可以让我们获取除法的剩余部分。
例如,我们输入 10 % 3
。
-
10 除以 3 的整数部分,是该除法的结果,不考虑小数点后的数字(在我们的示例中是 3)。
-
为了获得除法的模,我们取其余数。在我们的示例中,10 除以 3 等于 3,余数是 1。
5. 总结
-
Python 的解释器是运行 Python 程序必不可少的组件。实际的流程是,先编译 Python 代码为字节码,再对字节码解释执行。
-
Python 的解释器根据实现不同分为很多种,Python 官方提供的是 C语言写的 CPython,其他还有 Jython,RubyPython,IPython,等等。
-
Python 的解释器(交互模式)允许你在编写代码时就对其进行测试,非常方便。
-
Python 解释器可以接受数字,并能够执行计算。
-
有时,涉及小数的计算会得出近似的结果,这也是为什么我们更喜欢使用整数的原因。
6. 第一部分第四课预告
今天的课就到这里,一起加油吧!
下一课:Python探索之旅 | 第一部分第四课:变量的奇幻世界
我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」