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

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

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

圖1-5 在Windows系統中,Python的GUI“Shell”,稱為IDLE
>>>是Python解釋器的“提示符”。提示符是來自程序的信號,表示它正在等待用戶輸入。用戶可以輸入語句,當用戶按<Enter>鍵時,解釋器會顯示結果。
例如,輸入:
>>> 2+3 <Enter>
(用戶輸入以粗體顯示)。Python會顯示:
5 >>>
看起來很不錯!這里發生了很多事情。解釋器讀取你輸入的文本行(語句),然后分析文本并發現該語句有兩個用+號分隔的數字。分析文本并提取它的組件的過程稱為“解析”。
一些小實驗會讓你相信空格并不重要(只要語句在提示后立即開始,沒有前導空格)。例如,你可以輸入2+3或2+3或2+3——結果相同。但是如果你輸入2+* 3,你就會得到:
>>> 2+*3
^
SyntaxError: invalid syntax
>>>
現在嘗試:
>>> 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)不是報告語法錯誤,而是報告了別的內容,這似乎沒有什么幫助。TypeError指的是一個對象的“類型”(一個整數、一個函數等),而不是你在鍵盤上輸入的內容。顯然Python已經斷定你試圖用一個名為2的函數調用輸入值3+4,所以Python告訴你(以它自己神秘的方式),2不是一個函數。你可能會認為Python有時非常愚蠢。事實上,它既不聰明也不愚蠢——它只是一段代碼。
同時,你真正的意思是:
>>> 2*(3+4)
也許你認為乘法符號是可省略的,就像在數學中一樣。不是這樣。正如我們告訴過你:每個字符都很重要!
第1.3節練習
1.定義“冗余”。?
2.在Python解釋器中輸入2+?3。這是有效的語法嗎?解釋結果。現在對2++ 3做同樣的事情。
3.■嘗試2+++ 3。解釋結果。
4.嘗試2** 3和2 ** 4。Python的運算符**表示什么?
5.在Python中,單引號、雙引號或三引號中的文本片段代表“文字字符串”。嘗試"abc" + "def"和'abc' + 'def'和'''abc''' + '''def'''和"""abc""" + """def"""。解釋+運算符應用于字符串時的作用。?
6.*運算符可以應用于整數和字符串嗎?嘗試3 *'La'并解釋結果。
7.輸入9?8*2+6并解釋結果。輸入(5?1)*(1+2)**3并解釋結果。Python表達式中,“運算符的優先級”是什么(即首先應用哪些運算符)? ?
8.■在Python提示符處輸入17%3,同時嘗試15%4和15%5。%運算符計算什么?與+、 ?、*、/和**相比,運行一些測試以確定其等級(優先級)。 ?
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Google Flutter Mobile Development Quick Start Guide
- PHP 從入門到項目實踐(超值版)
- GitLab Repository Management
- Windows Server 2012 Unified Remote Access Planning and Deployment
- PLC編程及應用實戰
- 微信小程序入門指南
- Scala Functional Programming Patterns
- 數字媒體技術概論
- Three.js權威指南:在網頁上創建3D圖形和動畫的方法與實踐(原書第4版)
- Mastering Clojure
- Spring Boot 3:入門與應用實戰
- Leaflet.js Essentials
- Web程序設計與架構
- PostGIS Cookbook