# Python Programming - Lecture 00 執行環境 ###### tags: `python-programming` ## 0.1 什麼是 Python? <!-- https://www.facebook.com/ProgrammersCreateLife/photos/a.241809332534619/5177490398966463/ --> 根據維基百科的回答: > Python,是一種廣泛使用的直譯式、高階和通用的程式語言。 對於資工系以外的學生(或許還有部份資工系的學生)來說,這句話大概只有最後四個字看得懂。沒錯,**Python 是一種程式語言**。但如果只是這麼簡單的答案,我就不會特地寫這個小節出來了。其實 "Python" 除了用來指稱接下來我們要學習的這個程式語言之外,還有其他的意思。為了避免一詞多義的混淆,在開始學習之前,我想先簡單的介紹 "Python" 這個字在不同語境下的意義。 ### 0.1.1 Python 是一種程式語言 Python 最廣義的意思,就是用來指稱我們接下來要學習的這種程式語言。如果你聽到別人說「我這個程式是用 Python 寫的」、「我在公司的工作是要寫 Python」,那麼這裡的 "Python" 就是在指這個程式語言。 ### 0.1.2 Python 是一個軟體 程式語言本身是給人類看的,通常是用英文和一些標點符號撰寫的。電腦只看得懂 0101,而無法直接看懂這種用英文寫的程式語言(我們稱這種用英文寫、人類看得懂的程式語言是**高階的程式語言**)。因此我們需要有一本「字典」來把英文翻譯成電腦看得懂的 0101,才可以執行 Python 程式碼。這本「字典」就是 Python 的[**直譯器 (Interpreter)**](https://zh.wikipedia.org/zh-tw/%E7%9B%B4%E8%AD%AF%E8%AA%9E%E8%A8%80)。剛好,這支直譯器的軟體也叫作 "Python",所以如果你聽到別人說「你電腦有裝 Python 嗎?」、「你電腦裡裝的 Python 版本號是多少?」,這裡的 "Python" 指的是用來執行 Python 程式碼的直譯器。 :::info :memo: **編譯式語言和直譯式語言** 如果你以前有學習過 C 或 C++,你可能有印象當時會需要安裝一個叫作**編譯器 (Compiler)** 的東西,而且每一次程式改完都要再重新編譯一次才可以執行。在 Python,我們安裝的卻是直譯器,而不是編譯器。這兩個東西差一個字,到底差在哪呢? 不管是編譯語言還是直譯語言,高階的程式語言都是用英文和標點符號寫出來的,電腦無法直接看懂。如何從高階語言變成電腦看得懂的機器碼,這中間的過程差異就是區別編譯語言和直譯語言的關鍵。 以編譯語言來說,他們必須經過編譯器變成組合語言,再經過組譯器變成機器碼,才可以讓電腦看懂。這個翻譯的過程是在程式開始執行之前就一氣呵成的做完的,因此編譯語言做出來的程式通常會執行得比直譯語言要來得快。 直譯語言則是相反,程式碼不經過任何處理,直接丟入直譯器當中。直譯器會首先看第一行,將第一行程式碼翻譯成機器碼,執行第一行,然後看看結果有沒有錯誤,沒有的話才繼續處理第二行。由於是一邊翻譯一邊執行,資源無法做有效的分配,所以直譯語言做出來的程式通常會執行得比較慢。 以我們人類的行為來比喻的話,就好像是今天你手上有一張古希臘文的說明書,你知道按照這張說明書上的步驟一步一步做下去就可以召喚出死靈法師(?)。如果你是一個編譯器,那麼你就會先去翻古希臘文辭典,把這張說明書全部都翻成現代文的說明書之後,再按照現代文的說明書下去執行指令;如果你是一個直譯器,那你就會先看看古希臘文說明書上的第一句話,查字典看懂他,然後執行這個步驟,接下來再看第二句話,查字典看懂他,然後執行這個步驟...。雖然過程有點不太一樣,但(如果你沒有搞砸的話)最後都可以成功召喚出死靈法師(???)。 ::: ### 0.1.3 Python 是一個電視節目的名字 Python 這個語言之所以被取叫這個名字,是因為他的創始人吉多·范羅蘇姆 (Guido van Rossum) 是 BBC 電視劇《蒙提·派森的飛行馬戲團》(Monty **Python**'s Flying Circus) 的粉絲。 ### 0.1.4 Python 是一種蟒蛇 根據[劍橋中英辭典](https://dictionary.cambridge.org/zht/%E8%A9%9E%E5%85%B8/%E8%8B%B1%E8%AA%9E-%E6%BC%A2%E8%AA%9E-%E7%B9%81%E9%AB%94/python?q=Python): > python (noun) - a very large snake that kills animals for food by wrapping itself around them and crushing them. 蚺,巨蟒 Python 其實就是蟒蛇的意思,Python 的官方 logo 也是畫著兩隻蛇纏繞在一起的樣子: ![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Python-logo-notext.svg/240px-Python-logo-notext.svg.png) > Figure 0.1. Python 的 logo 是兩隻蛇蛇。 順帶一提,著名的 Python 虛擬環境管理套組 [Anaconda](https://www.anaconda.com/products/distribution) 則是「森蚺、大蟒蛇」的意思。 ~~我承認寫後面這兩點只是為了方便各位以後可以看懂工程師笑話(~~ ## 0.2 什麼是執行環境? 在開始學習 Python 之前,我們必須讓身心靈都先做好準備。我說的不是你,我說的是你的電腦。 電腦是在 1950 年代被發明出來的產物,而 [Python 是在 1980 年代才被發明出來的](https://zh.wikipedia.org/zh-tw/Python%E5%8F%B2)。想當然爾,電腦並不是天生就懂得 Python。如果要讓電腦可以執行 Python 程式,我們必須要讓電腦先俱備一些先備知識,而這個先備知識就是所謂的**執行環境 (environment)**。 我們講得更具體一點好了。現在我有一個 `.py` 檔,長得像下面這樣 ```python # hello.py print("Hello world!") ``` 如果你把這個檔案放在你的電腦桌面,然後滑鼠點兩下,若你事前沒有做任何準備動作,這麼做應該只是讓文字編輯器打開這個檔案而已,並不會有任何特別的事情發生。這就是因為你的電腦還看不懂 Python,還沒有俱備如何執行 `.py` 檔的必備知識。所以他只是把這個檔案當成一般的文字檔而已,而並沒有把他當成可以執行的程式碼。 在 [0.1.2](#012-Python-是一個軟體) 當中我們有提到,Python 是一種直譯式語言,需要直譯器將他翻譯成電腦看得懂的東西才可以執行。**Python 的執行環境,其實就是指這一支直譯器的程式再加上其他一些常見的函式庫。** ## 0.3 安裝執行環境 說這麼多,那到底怎麼讓我的電腦俱備可以執行 Python 的環境呢?很簡單,到 [Python 的官網](https://www.python.org/) 去下載就可以了。在 Download 的分頁中選擇你要的版本號和你的作業系統,接著跟著指示完成安裝就可以了。 (待補安裝說明) ### 0.3.1 Python 的版本號 Python 從被發明出來 (1989) 到現在 (2022) 已經經過了 30 多年,在這段過程當中已經經過了很多的變革。其中比較被大眾熟知的應該是 Python 2 和 Python 3 這兩個版本。從 Python 2 演進到 Python 3 的過程當中,包含語法和內建功能都有很大的變化,這兩個版本的直譯器,自然也都有很大幅度的修改。值得注意的是,**Python 3 的直譯器是無法執行 Python 2 的程式碼的!** 因此我們會說, Python 3 並不俱備向下相容性 (backward compatibility)。 **本教學使用的語法是 Python 3 的版本**,因此在安裝執行環境時,請至少要選擇 Python 3 以後的版本(Python 3.8 以後為佳)。而如果你有看到一些比較舊的教學或是程式碼,裡頭的 `print` 沒有接小括號,而是空白鍵加字串的話,就表示這是 Python 2 的程式碼。使用 Python 3 的執行環境是沒有辦法執行的。 ## 0.4 執行 Python 當你安裝好 Python 之後,你的電腦現在就看得懂 Python 的程式碼了。要怎麼執行 Python 程式呢?很可惜的,Python 只是一個直譯器,並沒有提供圖形化介面讓我們使用,因此我們無法透過滑鼠點兩下 icon 來執行 Python。我們只能透過[命令列介面 (Command-Line Interface, CLI)](https://zh.wikipedia.org/zh-tw/%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%95%8C%E9%9D%A2) 來執行 Python 而已。 根據作業系統的不同,你會有不同的方式來啟動命令列介面。在 Windows 上是開啟命令提示字元或是 Powershell,在 Unix 類系統中則是開啟終端機。以下我以 Linux 系統作為範例,示範如何執行 Python 程式。 在 [0.1.2](#012-Python-是一個軟體) 中,我們有說到 Python 是用來執行 Python 程式碼的直譯器。在 CLI 的世界中,如果你要啟動一支程式,你要先知道這支程式叫作什麼名字。由於我們下載的 Python 版本是 Python 3,所以這支程式就叫作 `python3`。如果你沒有打最後這個 `3` ,作業系統會以為你想要執行的是 Python 2 ,這時如果你沒有安裝 Python 2,那就會出現錯誤訊息: ```shell $ python Command 'python' not found, did you mean: command 'python3' from deb python3 command 'python' from deb python-is-python3 ``` 知道如何執行 Python 這支程式之後,我們有兩種方法可以叫這支程式來幫我們翻譯並執行 Python 的程式碼。 ### 0.4.1 使用 Python 的互動式介面 Python 是一種直譯式語言,是可以一句話一句話執行的。如果只是想要測試一下 Python 的語法,或是把 Python 當成計算機來使用,那麼可以直接執行 Python ,啟動它的互動式介面。 開啟終端機後輸入 `python3`。 ```shell $ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> ``` 這樣就進入了 Python 的互動介面。你可以在這個介面中輸入任何符合 python 語法的程式碼,這些程式碼會被一句一句執行。 ```shell $ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 123 + 456 579 >>> ``` ### 0.4.2 使用 Python 執行 python 腳本檔 Python 同時也是一種**腳本語言 (script language)**,也就是說,你可以把 Python 程式碼寫進一個檔案裏面(這個檔案就是**腳本檔 (script)** ),然後再交由 Python 直譯器來執行這個檔案裡的所有程式碼(但依然是一行一行執行)。 開一個新檔案叫作 `hello.py`,然後在裏面寫入: ```python # hello.py name = 'kinoe' print(f'Hello {name}') ``` 接著在終端機中執行 `python3 hello.py` ```shell $ python3 hello.py Hello kinoe ``` Python 的腳本檔副檔名是 `.py`,你可以給自己的檔案取任何名字,要執行時就是打 `python3 [filename].py` 就可以了。實務上,我們比較常使用這樣的方式來執行 Python 程式,互動式介面通常是測試語法的時候使用的。 ## 0.5 安裝程式編輯器 現在萬事具備,只欠程式碼了。開始學習 Python 前的最後一個準備步驟,就是找一個好用的編輯器。就如同 [0.1.2](#012-Python-是一個軟體) 當中所提到的,程式碼是用英文和標點符號寫出來的,所以如果你真的很懶的話,其實用作業系統內建的文字編輯器(記事本之類的)也是可以寫程式。但是內建的文字編輯器畢竟是編輯純文字用的,通常不會有文法提示和自動補完等等的方便功能。因此,我們通常還是會安裝寫程式專用的編輯器,來讓寫程式的過程更輕鬆方便。 以下我列舉幾個常見的程式編輯器,但你也可以使用適合自己的程式編輯器~ ### 0.5.1 VS Code (待補) ### 0.5.2 PyCharm (待補) ### 0.5.3 Sublime Text (待補) ---- [目錄](https://hackmd.io/@kaeteyaruyo/python-programming-index) | [Lec 01 - 資料型別與變數宣告 >>](https://hackmd.io/@kaeteyaruyo/python-programming-01)