Python探索之旅 | 第一部分第三课:初识Python的解释器

作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。
转载请注明出处。
原文:https://www.jianshu.com/p/a34eaffcc420

《Python探索之旅》全系列

内容简介


  1. 前言
  2. Python 的解释器
  3. Python 解释器的种类
  4. 做一点数学运算
  5. 总结
  6. 第一部分第三课预告

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 代码的原理,简单来说是像下面这样的:

  1. CPython 将 Python 代码编译为 ByteCode(字节码)。
  2. 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 / 210 / 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 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

posted @ 2020-07-05 05:06  公众号「程序员联盟」  阅读(294)  评论(0编辑  收藏  举报