1. Python2 & Python3 together
我的實驗環境是『Ubuntu 11.04』上面已經裝好了『Python 2.7.1+』,『Python 2』直譯器的所在位置是『/usr/bin/python』。
$ python -V Python 2.7.1+ $ which python /usr/bin/python |
如果直接從『 Ubuntu』的套件庫安裝『Python 3』,雖然『Python 3』直譯器也是會被安裝在『/usr/bin』目錄中,但是名稱會變成『python3』因此同時並存並不會發生衝突,所以就直接安裝啦~~~
$ sudo apt-get install python3 $ python -V Python 2.7.1+ $ python3 -V Python 3.2 $ which python /usr/bin/python $ which python3 /usr/bin/python3 |
2.誰要來解釋Script 的內容?
當妳在『Linux』作業系統執行一支 『可執行檔』時,妳所使用的『Shell』會先讀取 『可執行檔』最開頭的兩個『Byte』。
如果最開頭的兩個『Byte』是『#!』,也就是整支程式第一行最開頭的兩個『Byte』是『#!』,『Shell』會假設這是一支『Script』,這支 『Script』第二行起以後的內容『Shell』就會交由『#!』這一行所標示的直譯器來解釋。
所以如果所撰寫的『Script』是 for『Python 2』,『Script』的第一行就是,
#!/usr/bin/python |
或
#!/usr/bin/env python |
如果所撰寫的『Script』是 for『Python 3』,『Script』的第一行就是,
#!/usr/bin/python3 |
或
#!/usr/bin/env python3 |
當然,如果要讓一支『 Script』變成『可執行檔』需要賦予這支『Script』可執行屬性,
chmod +x <ScriptName> |
3.副檔名
雖然在『Linux』作業系統中『副檔名』並不具檔案類型關聯的功能,不過為了方便識別,習慣上我們會以『.py』做為『Python』程式的副檔名,以『.pyw』做為『Python GUI』程式的副檔名。
4.如何執行
如果『Python』Script 已經被賦予了『可執行屬性』可以直接以完整路徑來執行這支 Script,
$ /PATH/.../<ScriptName> |
或切換工作目錄到 Script 所在目錄再執行它,
$ ./<ScriptName> |
如果『Python』Script未被賦予『可執行屬性』,可以把它當成『Python』直譯器的參數"喂"給『Python』直譯器
$ python <ScriptName> |
$ python3 <ScriptName> |
5.註解
『 Python』有兩種註解符號,單行註解符號是『#』,多行註解則是以『'''』開頭『'''』結尾或『"""』開頭『"""』結尾。
#!/usr/bin/python3 # #『 #』之後的文字都會被視為註解文字 # ''' 從這一行開始 之間所有的文字都會被視為註解文字 ''' 到這一行結束 """ 這樣 也是 多行 註解 """ |
6. 中文註解
如果是使用『Python 2』直譯器,要在 Script 加中文註解,需先作如下宣告 ,
#-*- coding: utf-8 -* |
否則會出現如下錯誤,
$ python notest.py File "notest.py", line 3 SyntaxError: Non-ASCII character '\xe4' in file notest.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details $ python3 notest.py 中文註解測試 |
『Python 3』就不需要了。
7. 資料型別(Data Type) / 物件型別(Object Type)
由於 Python 將所有的資料(Data)都當成物件(Object),所以之後無論是 Data Type 或 Object Type 其實都是指同一件事,不過之後都一律統一稱為『 Data Type』。
另外 Python 並不需要對變數的『 Data Type』作宣告, Python 會依照變數賦值時所用的語法來決定變數的『 Data Type』。
8. 變數(variable)與變數賦值
雖然行為是一樣的,但 Python 其實並沒有『變數』這種東西,她是用『Object reference(物件參照)』的方法處理『變數賦值』這個行為。
與多數程式語言一樣,在進行所謂『變數賦值』這個行為時 Python會用到『=』這個符號,,例如,
String1 = 'String Object' |
由於給定的值被『'』刮起來,所以 Python會建立一個『str』物件 -- 'String Object',及一個指向這個物件的 『Object reference(物件參照)』-- String1 。
值給定後 Python 會建立一個物件及指向這個物件的『Object reference(物件參照)』,也就是...
變數賦值...... VariableName = <Vaule> 其實就是建立『Object reference(物件參照)』 Object reference = <Vaule> |
所以有『 Data Type』的是物件本身而非『Object reference(物件參照)』。
9. Identifier (識別字)
變數名稱也就是『Object reference(物件參照)』的名稱稱為『 Identifiers (識別字)』或是『name』,命名時需依據下列規則,
a. 首字要是一個英文字母(其實可以是任何Unicode中各種語系的字母,不過如果沒有特殊的嗜好,最好就限定只用英文大小寫字母會)或『_ (under line)』。
b. 第二個字元起可以使用所有 Unicode 所定義的字元符號,但空白字元符號除外。
c. 大小寫有別(Case Sensitive),沒有長度限制。
d. 不能與 Python 的關鍵字(Keywords)撞名。
10. Compound statement (複合敘述)and 縮排
每個 Compound statement 的首行會以『:』結尾,而 Python 是以縮排來決定 Block(程式區塊)的邊界,同時也是以縮排與否來判定 suite 是不是屬於某個 Compound statement ,所以屬於 if 、while 這一類Compound statement的 suite 一定要作縮排。
可以用『tab』或『space』來縮排,不過習慣上每一層級縮排會用四個『space』。
Compound Statement:suite |
11.Logical Operation(邏輯運算)
a. Identity Operator : 『is』、『is not』。
b. Binary Comparison Operator : 『<』、『<=』、『==』、『!=』、『>=』、『>』。
c. Membership Operator : 『in』、『not in』。
d. Logical Operator : 『and』、『not』、『or』。