继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

2020-07-05 05:10:113864浏览

Oscar

1实战 · 66手记 · 85推荐
TA的实战

作者 谢恩铭,慕课网精英讲师 Oscar老师。

内容简介


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

1. 前言


经过第一课的理论概念和第二课的 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. 第一部分第四课预告


今天的课就到这里,一起加油吧!


我是 谢恩铭,公众号「程序员联盟」(微信号:coderhub)运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP