Python探索之旅 | 第一部分第三課:初識(shí)Python的解釋器

作者 謝恩銘,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)。
轉(zhuǎn)載請(qǐng)注明出處。
原文:http://m.itdecent.cn/p/a34eaffcc420

《Python探索之旅》全系列

內(nèi)容簡介


  1. 前言
  2. Python 的解釋器
  3. Python 解釋器的種類
  4. 做一點(diǎn)數(shù)學(xué)運(yùn)算
  5. 總結(jié)
  6. 第一部分第三課預(yù)告

1. 前言


上一課是 Python探索之旅 | 第一部分第二課:安裝Python和Python的常用開發(fā)軟件

經(jīng)過第一課的理論概念和第二課的 Python 開發(fā)環(huán)境安裝之后,我們是時(shí)候來了解一下 Python 的解釋器了。

即使這一課的一些小測(cè)試看似沒什么了不起的,但你卻可以借此對(duì) Python 的語法有一個(gè)初步概念。我強(qiáng)烈建議你循序漸進(jìn)地跟著我們動(dòng)手練習(xí),尤其是如果 Python 是你的第一門編程語言的話。

和任何編程語言一樣,Python 具有清晰的語法:你不能隨便向 Python 發(fā)送任何信息。我們將看到 Python 可以接收什么,不可以接收什么。

2. Python 的解釋器


上一課,我們?cè)谧詈笥?PyCharm 創(chuàng)建了一個(gè) Python 的項(xiàng)目,并且創(chuàng)建了我們的第一個(gè) Python 文件(hello_python.py),然后用項(xiàng)目配置的 Python 解釋器(就是我們安裝的 Python 中自帶的解釋器。例如我們上一課在 Windows 中安裝的 Python 解釋器的路徑是在 C:\Program Files\Python37\python.exe)來運(yùn)行此 Python 文件,輸出了:

Hello Python

像 PyCharm 這樣的 IDE(集成開發(fā)環(huán)境)已經(jīng)把各種開發(fā)工具(代碼編輯器,解釋器,編譯器,調(diào)試器,等等)融合在一起了。我們使用 IDE 確實(shí)可以大大加快開發(fā)速度,但不能幫助我們理解編程的一些原理。

順便一提:強(qiáng)大的 Visual Studio Code


對(duì)了,順便一提,現(xiàn)在開發(fā) Python,除了 PyCharm 這個(gè)強(qiáng)大的 IDE,你也可以使用 Visual Studio Code(簡稱 VS Code)這個(gè)微軟開源的代碼編輯器。

雖說 VS Code 本身是一個(gè)代碼編輯器,但是它豐富的插件卻可以將其變成一個(gè)不俗的 IDE。VS Code 跨平臺(tái)(在 Windows,Linux 和 macOS 中都可以運(yùn)行),體積小,速度快,現(xiàn)在已經(jīng)成為了很多開發(fā)者的最愛。

如果你不想安裝 JetBrains 家的比較大型的 IDE,也可以試試 VS Code。

VS Code 的官網(wǎng)是 https://code.visualstudio.com 。下載后安裝非常簡單,就和安裝普通軟件沒什么區(qū)別。

打開 VS Code 后,針對(duì)某種編程語言例如 Python,只需要安裝對(duì)應(yīng)的官方插件(由微軟開發(fā)),即可運(yùn)行和調(diào)試該語言,也就是搖身一變成為該語言的 IDE 了。

例如我在 VS Code 中安裝了微軟官方的 Python 插件。

然后,我在 VS Code 中創(chuàng)建一個(gè)文件,就叫 hello_python.py,和上一課在 PyCharm 中創(chuàng)建的文件同名。

hello_python.py 中寫入 print("Hello Python")。運(yùn)行此 Python 文件,就得到和在 PyCharm 中一樣的輸出:

Hello Python

這些年微軟自從 薩提亞·納德拉(Satya Nadella)擔(dān)任 CEO 之后,逐漸擁抱開源,確實(shí)為互聯(lián)網(wǎng)領(lǐng)域做出了不少貢獻(xiàn)。

當(dāng)然了,我們這門課程還是會(huì)使用 PyCharm 作為開發(fā)工具。我介紹 VS Code,主要是為大家提供更多的可能性。

好了,說回我們的 Python 解釋器。

我們之前說過,Python 是解釋型語言,Python 文件要被解釋器解釋執(zhí)行。

當(dāng)然了,其實(shí) Python 也和 Java 類似,是先編譯后解釋的語言。Python 的源代碼會(huì)先被編譯成字節(jié)碼(ByteCode)文件(.pyc 文件,類似 Java 的 .class 文件),字節(jié)碼文件再被解釋執(zhí)行。
這塊知識(shí)可能對(duì)于新手來說有點(diǎn)難理解。暫時(shí)你就記住 Python 需要一個(gè)解釋器來執(zhí)行也夠了。

解釋器的英語單詞是 interpreter。

我們來看一下在三大主流操作系統(tǒng)中,如何調(diào)出(或稱運(yùn)行)Python 的解釋器。

在 Windows 中


我們之前安裝完 Python 之后,在 Windows 的開始菜單中就有了一個(gè) Python 文件夾。

點(diǎn)擊上圖中紅框標(biāo)出的那個(gè) Python 3.7 (64-bit),就以 Console(控制臺(tái))的形式打開 Python 的解釋器,打開之后就進(jìn)入了交互模式(interactive mode)。

可以看到,Python 解釋器運(yùn)行在交互模式的時(shí)候,最開頭是 Python 的歡迎信息,例如版本號(hào)(這里是 3.7.8),版權(quán)聲明,等等。

你可以看到有一個(gè) >>> 的符號(hào),這是它的主提示符(primary prompt),提示輸入下一條指令。你可以在 >>> 后面輸入指令,按下回車,就會(huì)由 Python 解釋器來執(zhí)行指令。

Python 的解釋器是 Python 的一大優(yōu)勢(shì),很方便我們進(jìn)行一些測(cè)試。其他語言如 C語言,Java 和 C++ 這些編譯型語言,可能沒有這么方便測(cè)試代碼的方式。

除了這種調(diào)出 Python 解釋器的方式,我們還可以用 Windows 的命令提示符來運(yùn)行 Python 解釋器。

Windows 的命令提示符通常也被稱為 CMD。用快捷鍵【W(wǎng)indows鍵 + r】,然后輸入 cmd,再回車,就可以打開命令提示符。在命令提示符中輸入 python,就運(yùn)行了 Python 的解釋器。

要退出 Python 的解釋器,我們可以輸入 quit()exit(),再按下回車。

在 Linux 中


之前我們?cè)?CentOS 這個(gè) Linux 發(fā)行版中演示了如何安裝 Python 最新穩(wěn)定版。

一旦你在 Linux 中安裝了 Python,那么它會(huì)自動(dòng)為你創(chuàng)建一個(gè)到 Python 解釋器的鏈接,例如 python 3.x(x 是次版本號(hào)。例如 Python 3.7.8,那么它的次版本號(hào)就是 7)。

我們之前安裝的是 Python 3.7.8 這個(gè)最新穩(wěn)定版。因此,我們先打開 Linux 的 Terminal(終端),

在終端中輸入 python3.7(因?yàn)槲覀儼惭b的是 Python 3.7.8),可以看到 Python 的解釋器(交互模式)就被運(yùn)行起來了:

在 Linux 中,要退出 Python 的解釋器,可以輸入 quit()exit(),再按下回車。此外,我們也可以用快捷鍵 Ctrl + d。

在 macOS 中


在 macOS 中,Python 一般是被安裝到 Applications(應(yīng)用程序)的目錄中。依次點(diǎn)擊 “前往” -> “應(yīng)用程序”(也可以直接用快捷鍵 Cmd + Shift + a)。

點(diǎn)擊“應(yīng)用程序”,進(jìn)入應(yīng)用程序的文件夾??梢钥吹?,Python 3.7.8 創(chuàng)建了一個(gè)文件夾,名叫 Python 3.7。

我們進(jìn)入 Python 3.7 這個(gè)文件夾??梢钥吹揭韵聝?nèi)容:

我們運(yùn)行那個(gè) IDLE(Integrated Development and Learning Environment 的縮寫,表示“集成開發(fā)和學(xué)習(xí)環(huán)境”。IDLE 具備基本的 IDE 的功能,是非商業(yè) Python 開發(fā)的不錯(cuò)的選擇)。

在 macOS 下,除了用 IDLE,我們也可以在 Terminal(終端)中運(yùn)行 Python 的解釋器(交互模式)。

macOS 下的 Terminal,位于“前往” -> “實(shí)用工具”(也可以直接用快捷鍵 Cmd + Shift + u)。當(dāng)然了,你也可以直接在 Spotlight(聚焦搜索)中直接輸入 terminal 來打開。

打開 Terminal 后,輸入 python3.7(因?yàn)槲覀儼惭b的是 Python 3.7.8),可以看到 Python 的解釋器(交互模式)就被運(yùn)行起來了。

在 macOS 中,要退出 Python 的解釋器,可以輸入 quit()exit(),再按下回車。此外,我們也可以用快捷鍵 Ctrl + d。

Python 解釋器吃什么?


我們已經(jīng)演示了在三大主流操作系統(tǒng)中如何運(yùn)行 Python 的解釋器。那么,Python 的解釋器到底吃什么(就是它可以接受什么命令)呢?

正如我們所說的那樣,編程語言遵循清晰的語法。你不可能期望 Python 的解釋器能理解以下內(nèi)容:“親愛的 Python 解釋器啊,我希望你為我編寫一款出色的 3D 游戲!”

目前來說,我們還辦不到這一點(diǎn)。多年以后,也許可行。

因此,如果你在 Python 解釋器的命令提示符后面輸入某些內(nèi)容,它很可能會(huì)清楚而堅(jiān)定地告訴你:“我完全沒有聽懂你在說什么?!?/p>

例如,如果輸入 First test with Python(表示“用Python進(jìn)行的第一次測(cè)試”),則會(huì)得到以下結(jié)果:

是的,Python 解釋器會(huì)說英語。對(duì)于絕大多數(shù)編程語言,你輸入的命令也是用英語寫的。

不過,如果你輸入的命令不符合 Python 的語法,那么就像以前英語老師會(huì)跟你說“你的英語語法用錯(cuò)了”一樣,Python 的解釋器也會(huì)以類似的方式通知你:SyntaxError: invalid syntax(表示“語法錯(cuò)誤:無效的語法”)。

很清楚不是嗎?你輸入的內(nèi)容是 Python 解釋器所無法理解的。不過,它并沒有“生氣”,因?yàn)樗譃槟泔@示了 >>> 這個(gè)命令提示符,表明它已準(zhǔn)備好接受你的“再一次打擊”。

3. Python 解釋器的種類


當(dāng)我們編寫 Python 代碼時(shí),我們會(huì)創(chuàng)建一個(gè)以 .py 為擴(kuò)展名的文件,在其中寫入 Python 的代碼。要運(yùn)行代碼,就需要 Python 解釋器去執(zhí)行這個(gè) .py 文件。

Python 語言是開源的,所以理論上,只要水平夠好,任何人都可以編寫 Python 解釋器來執(zhí)行 Python 代碼。實(shí)際上,確實(shí)存在多種 Python 解釋器。

CPython


我們從 Python 的官方網(wǎng)站 https://www.python.org 下載并安裝好 Python 后,我們就獲得了一個(gè)官方版本的解釋器:CPython。

CPython 這個(gè)解釋器是用 C語言開發(fā)的(如果你要學(xué)習(xí) C語言,可以參看我的《C語言探索之旅》 系列教程)。

Python 之父在編寫 Python 語言時(shí),最開始也是用 C語言的。在命令行下運(yùn)行 python 啟動(dòng)的就是 CPython 解釋器。

CPython 是使用最廣的 Python 解釋器。我們的課程的代碼都會(huì)在 CPython 下執(zhí)行。

CPython 解釋執(zhí)行 Python 代碼的原理,簡單來說是像下面這樣的:

  1. CPython 將 Python 代碼編譯為 ByteCode(字節(jié)碼)。
  2. CPython 解釋器中的虛擬機(jī)執(zhí)行這些字節(jié)碼。

所以,在這一點(diǎn)上,Python 和 Java 還是比較像的。

Jython


Jython 是運(yùn)行在 Java 平臺(tái)上的 Python 解釋器,可以把 Python 代碼編譯成 Java 字節(jié)碼執(zhí)行。

IronPython


IronPython 和 Jython 類似。IronPython 是運(yùn)行在微軟的 .Net 平臺(tái)上的 Python 解釋器,可以把 Python 的代碼編譯成 .Net 的字節(jié)碼。

類似的還有如 RubyPython,Brython,等等??梢娤卤恚?/p>

實(shí)現(xiàn) 虛擬機(jī) 兼容的語言
CPython CPython VM C
Jython JVM Java
IronPython CLR C#
RubyPython Ruby VM Ruby
Brython JavaScript 引擎(例如:V8) JavaScript

IPython


IPython 是基于 CPython 之上的一個(gè)交互式解釋器。IPython 在交互方式上比 CPython 有所增強(qiáng),但是執(zhí)行 Python 代碼的原理和 CPython 是一樣的。好比很多瀏覽器雖然外觀不同,但內(nèi)核其實(shí)都是調(diào)用了 Chromium。

我們之后的課程會(huì)使用到的 Jupyter Notebook 就使用到了 IPython。Jupyter Notebook 以前是叫 IPython Notebook 的。

CPython 用 >>> 作為提示符,IPython 用 In [序號(hào)]: 作為提示符。

PyPy


PyPy 是另一個(gè) Python 解釋器,它的目標(biāo)是執(zhí)行速度。PyPy 采用 JIT(Just-In-Time,表示“即時(shí)”)編譯技術(shù),對(duì) Python 代碼進(jìn)行動(dòng)態(tài)編譯,可以顯著提高 Python 代碼的執(zhí)行速度。Java 的 HotSpot 虛擬機(jī)也使用到了 JIT 技術(shù)。

絕大部分 Python 代碼都可以在 PyPy 下運(yùn)行,但是 PyPy 和 CPython 有一些不同,相同的 Python 代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果。如果你的代碼要在 PyPy 下執(zhí)行,需要了解 PyPy和 CPython 的不同點(diǎn):https://doc.pypy.org/en/latest/cpython_differences.html 。

4. 做一點(diǎn)數(shù)學(xué)運(yùn)算


我們用 Python 的解釋器來做一些運(yùn)算。這些運(yùn)算是比較簡單的,不過,我認(rèn)為這是幫助你逐步了解 Python 語法的好方法。

輸入一個(gè)數(shù)字


我們可以在 Python 解釋器中輸入一個(gè)數(shù)字,例如 7 這個(gè)整數(shù),然后按下回車。

可以看到,沒有什么特別的。我們輸入一個(gè)數(shù)字,Python 解釋器將其原樣輸出。

但是,這種簡單的返回表明 Python 解釋器正確理解了你的輸入,并且你的輸入符合其語法。

同樣,你也可以輸入浮點(diǎn)數(shù),例如我們輸入 7.2 。

不用說,我們也可以輸入負(fù)數(shù),例如我們輸入 -1.5。

常用的運(yùn)算


好了,是時(shí)候?qū)W習(xí)如何使用 Python 的主要運(yùn)算符了。大部分時(shí)候,這些運(yùn)算符已經(jīng)足夠滿足我們用 Python 進(jìn)行的計(jì)算了。

加、減、乘、除

為了執(zhí)行這些基本運(yùn)算,我們需要分別使用符號(hào) +(加),-(減),*(乘) 和 /(除)。

為什么最后一個(gè)結(jié)果(3.12 + 2.18 的結(jié)果)是一個(gè)近似值呢?3.12 + 2.18 不是應(yīng)該等于 5.3 嗎?為什么它輸出的卻是 5.300000000000001 呢?

其實(shí),這和 Python 沒有太多關(guān)系,問題主要出在你的計(jì)算機(jī)將浮點(diǎn)數(shù)寫入內(nèi)存的方式。這也是為什么在編程中,我們盡可能多地使用整數(shù)的原因。

不過,誤差是很小的,不會(huì)對(duì)計(jì)算產(chǎn)生太多實(shí)際影響。需要非常高精度計(jì)算的應(yīng)用程序會(huì)試圖通過其他方法克服這些缺陷,但是一般來說我們不必在意。

你可以用同樣的方式測(cè)試 減法,乘法和除法。

整除和取模運(yùn)算


如果你測(cè)試除法,你將發(fā)現(xiàn)結(jié)果是浮點(diǎn)數(shù)。

例如,我們輸入 10 / 210 / 3。

還有其他兩個(gè)運(yùn)算符,可以讓我們獲得整數(shù)除法的結(jié)果以及除法的剩余部分。

第一個(gè)運(yùn)算符是 //(兩個(gè)斜杠),這樣就可以得到除法的整數(shù)部分。

例如,我們輸入 10 // 3

第二個(gè)運(yùn)算符是被稱為“取?!钡倪\(yùn)算符 ,可以讓我們獲取除法的剩余部分。

例如,我們輸入 10 % 3。

  • 10 除以 3 的整數(shù)部分,是該除法的結(jié)果,不考慮小數(shù)點(diǎn)后的數(shù)字(在我們的示例中是 3)。

  • 為了獲得除法的模,我們?nèi)∑溆鄶?shù)。在我們的示例中,10 除以 3 等于 3,余數(shù)是 1。

5. 總結(jié)


  • Python 的解釋器是運(yùn)行 Python 程序必不可少的組件。實(shí)際的流程是,先編譯 Python 代碼為字節(jié)碼,再對(duì)字節(jié)碼解釋執(zhí)行。

  • Python 的解釋器根據(jù)實(shí)現(xiàn)不同分為很多種,Python 官方提供的是 C語言寫的 CPython,其他還有 Jython,RubyPython,IPython,等等。

  • Python 的解釋器(交互模式)允許你在編寫代碼時(shí)就對(duì)其進(jìn)行測(cè)試,非常方便。

  • Python 解釋器可以接受數(shù)字,并能夠執(zhí)行計(jì)算。

  • 有時(shí),涉及小數(shù)的計(jì)算會(huì)得出近似的結(jié)果,這也是為什么我們更喜歡使用整數(shù)的原因。

6. 第一部分第四課預(yù)告


今天的課就到這里,一起加油吧!

下一課:Python探索之旅 | 第一部分第四課:變量的奇幻世界


我是 謝恩銘,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)運(yùn)營者,慕課網(wǎng)精英講師 Oscar 老師,終生學(xué)習(xí)者。
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:「向著標(biāo)桿直跑」

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容