- 計算思維與Python編程
- (美)瑪麗亞·利特文 加里·利特文
- 2191字
- 2020-05-20 09:26:02
1.3 Python解釋器
以數(shù)字序列的方式來編寫程序是非常煩瑣的(盡管在計算機時代的早期階段,程序員就是這么做的)。幸運的是,人們很快意識到,他們可以為編寫程序而定義特殊的語言,并使用計算機將程序從高級編程語言轉(zhuǎn)換為機器代碼。早期的編程語言有Fortran、COBOL和BASIC。今天流行的語言有C++、C#、Java和JavaScript等。Python是另一種非常流行的編程語言:它是由荷蘭數(shù)學中心(Stichting Mathematisch Centrum)的Guido van Rossum于20世紀90年代初發(fā)明的。
在高級編程語言中,每個語句都轉(zhuǎn)換為多個CPU指令。圖1-3展示了一個用Python編寫的函數(shù),它由一個文檔字符串(Docstring,三引號中的一段注釋,幫助使用該函數(shù))和一些語句組成。

圖1-3 用Python編寫的函數(shù)
用機器語言或匯編語言編寫的程序僅適用于具有兼容性CPU的計算機。換句話說,命令/語句限定于特定的CPU。用高級語言編寫的程序可以與任何CPU一起使用。例如,它可以在PC或Mac上運行。
? ? ?
有兩種方法,可以將高級編程語言編寫的程序轉(zhuǎn)換為機器代碼。第一種方法稱為“編譯”:一種稱為“編譯器”的特殊程序,檢查高級語言編寫的程序文本,生成適當?shù)臋C器語言指令,并將它們保存在一個可執(zhí)行文件中,該文件可以在計算機上運行。程序編譯后,運行該文件就不需要編譯器了。第二種方法稱為“解釋”:一種稱為“解釋器”的特殊程序,檢查程序的文本,生成適當?shù)闹噶睿⒘⒓磮?zhí)行這些指令。解釋器不會創(chuàng)建可執(zhí)行文件,每次運行程序都需要解釋器。
編譯就像外語教材的書面翻譯一樣,解釋就像在外國人說話的同時進行同聲翻譯。解釋器可以從文件中讀取程序,也可以允許你以交互方式逐行輸入程序語句。
一些現(xiàn)代語言(如Java)使用混合的方法。首先,它們將程序編譯成一種稱為“字節(jié)碼”的中間低級語言,它仍然獨立于特定的CPU,但更緊湊,更接近機器語言。然后它們在解釋字節(jié)碼時執(zhí)行程序。Python也將“模塊(函數(shù)庫)”預編譯為字節(jié)碼。
? ? ?
程序的文本由相當嚴格的語法規(guī)則控制:你不能簡單地輸入隨心所欲的內(nèi)容,并指望計算機理解它。
程序中的每個符號都必須位于正確的位置。
在英語或其他自然語言中,你可以拼錯一個單詞或省略一些標點符號,但仍然可以生成可讀的文本。這是因為自然語言具有“冗余”,信息以低于最佳效率的方式傳輸,但這導致即使它有某種亂碼,讀者仍可以正確地解釋消息(見圖1-4)。

圖1-4 Lyla Fletcher Groom的故事,5歲(由寫作研討會提供)
編程語言實際上沒有冗余,幾乎每個字符都是必不可少的。編程中很可能會犯錯誤,因此編程人員必須學會耐心并注重細節(jié),在修復代碼的錯誤時堅持不懈。
? ? ?
我們現(xiàn)在準備使用Python。根據(jù)開源許可證,Python可免費獲得,即使是商業(yè)應(yīng)用程序也是如此。Python許可證由Python Software Foundation管理。
在本書中,我們將使用Python 3,即Python的較新版本。
▼
早期版本的Python稱為“Python 2”。Python 2和Python 3之間存在一些差異——它們不是百分之百兼容。在撰寫本書時,Python 3的最新版本是3.7.3。
關(guān)于如何下載適用于你的計算機和操作系統(tǒng)的Python安裝程序,請參閱其他相關(guān)入門教程。
▲
? ? ?
在編譯語言時,你需要創(chuàng)建程序文本,并將它保存在一個文件中,稱為“源代碼”,然后讓源代碼文件通過編譯器運行,以得到可執(zhí)行程序。在Python中,你可以從源文件中讀取程序,也可以在Python解釋器Shell中輸入單個語句,并立即查看結(jié)果。
使用GUI(圖形用戶界面)前端運行Python解釋器很方便。標準安裝的Python附帶的GUI稱為IDLE(見圖1-5)。

圖1-5 在Windows系統(tǒng)中,Python的GUI“Shell”,稱為IDLE
>>>是Python解釋器的“提示符”。提示符是來自程序的信號,表示它正在等待用戶輸入。用戶可以輸入語句,當用戶按<Enter>鍵時,解釋器會顯示結(jié)果。
例如,輸入:
>>> 2+3 <Enter>
(用戶輸入以粗體顯示)。Python會顯示:
5 >>>
看起來很不錯!這里發(fā)生了很多事情。解釋器讀取你輸入的文本行(語句),然后分析文本并發(fā)現(xiàn)該語句有兩個用+號分隔的數(shù)字。分析文本并提取它的組件的過程稱為“解析”。
一些小實驗會讓你相信空格并不重要(只要語句在提示后立即開始,沒有前導空格)。例如,你可以輸入2+3或2+3或2+3——結(jié)果相同。但是如果你輸入2+* 3,你就會得到:
>>> 2+*3
^
SyntaxError: invalid syntax
>>>
現(xiàn)在嘗試:
>>> 2(3+4)
你預期會得到14,對嗎?沒有!你得到的是:
Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> 2(3+4) TypeError: 'int' object is not callable
顯然,Python解釋器“認為”你輸入的語句有問題。但是,Python(讓我們將解釋器簡稱為Python)不是報告語法錯誤,而是報告了別的內(nèi)容,這似乎沒有什么幫助。TypeError指的是一個對象的“類型”(一個整數(shù)、一個函數(shù)等),而不是你在鍵盤上輸入的內(nèi)容。顯然Python已經(jīng)斷定你試圖用一個名為2的函數(shù)調(diào)用輸入值3+4,所以Python告訴你(以它自己神秘的方式),2不是一個函數(shù)。你可能會認為Python有時非常愚蠢。事實上,它既不聰明也不愚蠢——它只是一段代碼。
同時,你真正的意思是:
>>> 2*(3+4)
也許你認為乘法符號是可省略的,就像在數(shù)學中一樣。不是這樣。正如我們告訴過你:每個字符都很重要!
第1.3節(jié)練習
1.定義“冗余”。?
2.在Python解釋器中輸入2+?3。這是有效的語法嗎?解釋結(jié)果。現(xiàn)在對2++ 3做同樣的事情。
3.■嘗試2+++ 3。解釋結(jié)果。
4.嘗試2** 3和2 ** 4。Python的運算符**表示什么?
5.在Python中,單引號、雙引號或三引號中的文本片段代表“文字字符串”。嘗試"abc" + "def"和'abc' + 'def'和'''abc''' + '''def'''和"""abc""" + """def"""。解釋+運算符應(yīng)用于字符串時的作用。?
6.*運算符可以應(yīng)用于整數(shù)和字符串嗎?嘗試3 *'La'并解釋結(jié)果。
7.輸入9?8*2+6并解釋結(jié)果。輸入(5?1)*(1+2)**3并解釋結(jié)果。Python表達式中,“運算符的優(yōu)先級”是什么(即首先應(yīng)用哪些運算符)? ?
8.■在Python提示符處輸入17%3,同時嘗試15%4和15%5。%運算符計算什么?與+、 ?、*、/和**相比,運行一些測試以確定其等級(優(yōu)先級)。 ?
- 黑客攻防從入門到精通(實戰(zhàn)秘笈版)
- Learn Blockchain Programming with JavaScript
- The Android Game Developer's Handbook
- iOS 9 Game Development Essentials
- Instant QlikView 11 Application Development
- Linux環(huán)境編程:從應(yīng)用到內(nèi)核
- Learning AndEngine
- The DevOps 2.5 Toolkit
- Vue.js應(yīng)用測試
- Clojure for Java Developers
- PowerDesigner 16 從入門到精通
- 原型設(shè)計:打造成功產(chǎn)品的實用方法及實踐
- R語言:邁向大數(shù)據(jù)之路
- Java Script從入門到精通(第5版)
- Java Web開發(fā)任務(wù)教程