簡介
這次想分享一下有關Python在使用別人的輪子的觀念,在網路上有非常非常多的好輪子,但有時候我們在下載回來時,卻不能使用,所以在這我想將這些輪子來做分類並講述一下結構、引用、使用方法,這觀念我覺得是蠻重要的。
函式
在介紹之前我們先釐清資料的結構,我們可以先有一個概念,先知道誰是老大,函式<(類別-模組)<套件,一種一層包一層的概念,雖然這些單位都可以獨立存在也可以獨立應用,除了套件之外,其他的都可以寫在主程式中,這樣的話就不用『import』了,但是假使遇到要使用很多輪子時,主程式會變得很髒,閱讀與維護上就會耗費一些時間了,所以物件導向的程式語言當然就要應用的淋漓盡致。
如上圖紅色框框處,這就是所謂的『函式』,在Python中,以『def為前綴』的寫法。
在上面的實驗用意是,在主程式中也可以直接新增客製化函式,並在下方實際應用,這就像C#中的『class』。在使用該函式時要傳入兩個變數,函示則會回傳,函示運算過後的數值,如下方的Print結果。
而在Python中,還有一種簡單函式的寫法,如上圖,透過『lambda』來應用,而在圖中有三個不同顏色的底線,橙色-就是給要使用該函式的Input參數,紅色-預設要印出的數值,藍色-判斷式,印出結果。而結果如上圖,3比4小所以印出3。以上的兩個函式製作方法給大家參考。
類別
類別,大家可以想像是一個固定的py檔案,而且是集合了很多相關的函示,舉個例來說,現在我們想要製作一個關於角色的基本資訊,如:名稱、等級、裝備、血量等等,這類相關的函式集合在一個檔案中,並可以在主程式來應用,import,我們就稱類別。
如上所述,這邊是個銀行帳戶建立、存款、提款等函式,如上圖一,其中包含了四個函式而組成一個類別檔案叫做bank.py。
透過剛剛的類別,我們import進去主程式使用。如上圖,必須先『Import bank(副檔名可以省略)』,再來新增一個容器來裝資料,在使用上可以直接使用import的名稱,並直接呼叫函式名稱並填入指定參數即可。
如上圖,我先輸入帳戶名稱、帳號、存款金額,而acct這容器則會保存以上資料,接著再使用存款與提款函示,最後並印出餘額,以上就是類別在Python中的操作。
值得一提的是,如上圖,通常網路上的輪子類別中,很常看到『__init__』這個函式,定義了物件的初始流程,取代了原本的『account』函式,注意到每個類別中的函式,首個參數『必定』接受物件本身,慣例上使用『self』 名稱,就像是C#中『this』的概念。
模組
類別與模組非常相似,但模組通常比較使用在數學運算是中,我們有時候Import別人的模組或類別時,可能會遇到ImportError的情況,是因為在Import的同時系統會去找尋在與主程式同樣階層的路徑中的模組或類別,找不到的話就會到sys.path找,都找不到就會發生這狀況。我們直接操作所謂的模組看看。
我們先看到上圖一,在模組中,紅色框框就是大家熟識的函式,這些函示在處理簡單的數學運算,而下方的綠色框框則是變數,無論在類別或函示中,都可以塞你想要塞的函式、變數、屬性物件等等,只要有相關(建議),也可以在模組中預處理一些函式與參數的交互結果,可以供給主程式使用。
圖二就是實際應用,這邊一樣將模組Import近來,我們分三個常用使用方法來說。第一種就是單純的使用Import模組當容器,並直接呼叫函示或變數。第二種就是把模組在主程式另外製作一個替身,透過『as』來實現,該替身即有模組本身的功能。第三種則是很常見的『from .. import ..』,就是從模組中的某個函式取出來給主程式用,大家有這些概念,就可以看懂很多網路上別人分享的資源,並加以應用。
套件
接著就是要講模組類別的集合體了,如果你現在從網路上下載別人寫好的資源,通常你可以看到他們會用一個資料夾包起來,這就可稱為一個套件。
在主程式Import時候,你也可以直接輸入套件名稱,如上圖,就可以輸入『import newsfetch.google』,Python 會尋找套件中,會先看裏頭是否有 __init__.py 檔案,然後在尋找目錄中是否有個 google.py 檔案。
而套件中也經常看到別人會放一個檔案,名稱叫做『__init__.py』,這個檔案就是將資料夾變成套件的一個關鍵,python會認資料夾中有沒有這檔案,有的話就會把該目錄視為一個套件,目錄的名稱也就是套件的名稱。
__init__.py 檔案空白也無所謂,實際上當中也可以寫些程式碼,用來執行這個套件中都會需要的初始工作,不過慣例上,除非你有真正不得已的理由,請保持 __init__.py 檔案空白。在找到模組後,實際上會執行其中頂層範疇中的程式碼,之後,模組中的變數、函式、類別等名稱,可以透過『 newsfetch.google』來取得。
小結
上圖,我把這篇分享的所有元素及合成一張圖片,並做個重點整理:
- 套件-可以放模組與類別,在資料夾中記得加入『__init__.py 』,python才會視該資料夾為套件,套件名稱等於資料夾名稱。
- 模組與類別-模組大多應用在數學運算,類別大多運用在陳述式,但其實這兩個東西非常相似,有時候也可以不用這麼仔細去區分兩者差別。
- 函式-或是可以說成方法,會在程式碼中如影隨形,在很多地方都有它的存在,可以在類別中,也可以在主程式中建置。
經過這篇的釐清與整理,我想應該是大概知道python中import , from import , import as,與這些套件、類別、函式的關聯,在未來使用別人的輪子時可以更快上手,也跟大家分享。