2011年10月6日 星期四

[Learning Python] 基本預備知識

    在開始動手寫之前,先整理一下需要知道的預備知識。


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』。