1.前言 前面講了一些關於python的一些基本的語法及語句,在這個地方繼續講python的方法及其python核心概念的面向對象。我們都知道python被稱為面向對象的語言,那麼在這裡我們將正式的接觸 的python的核心。 2.函數 定義:是可調用的,執行某種行為並返回一個值。判斷一個函數是否可 ...
1.前言
前面講了一些關於python的一些基本的語法及語句,在這個地方繼續講python的方法及其python核心概念的面向對象。我們都知道python被稱為面向對象的語言,那麼在這裡我們將正式的接觸 的python的核心。
2.函數
定義:是可調用的,執行某種行為並返回一個值。判斷一個函數是否可以調用,可以使用內置的callable函數。在下麵的列子中,x返回false,cal返回true。
1 def cal(): 2 return 'function' 3 x=1 4 5 print(callable(x)) 6 print(callable(cal))
在上面的函數中,我們可以在括弧中指定參數名稱,這樣就能把我們需要的參數傳遞到方法函數中。但在傳遞參數過程中,我們需要註意函數的作用域,即當前函數在某一段代碼中起作用,在其他中無法訪問。兩個相同的值的變數,在錶面現象,我們看起來吃相等的,但是實際在程式中他們是不等。對於在函數中賦值,同樣會存在一個這個問題。例如:
1 names=['a','b','c'] 2 n=names[:] 3 4 print(n is names) 5 6 print(n==names)
在 ‘n is names’返回false,而‘n==names’返回true。錶面上我們看到的時候n和names的值相等,但是n不一定就是names,這裡會涉及到引用的一個問題,我們在創建一個變數時,系統會自動為他分配一個相當於是一個唯一的標識,同理,在這個地方,我們同時創建了n和names,系統會分配不同的標識,雖然n是通過names賦值的。但在這裡只能說他們的值相等,而不能說n就是names。
現在我們在函數中傳遞的參數都叫做位置參數,因為他們的位置是不可變的,如果將位置改變之後,那在對應調用函數時,傳遞參數的值的位置也需要發生改變,否則會發生參數傳遞錯誤的現象。在python中,我們可以對函數的參數賦預設值,這樣當在調用函數時,如果不需要參入自己想要的參數,那麼可以不傳。方式為在參數後面緊跟預設值。
遞歸
在函數中,函數可以調用其它函數,但是也可以調用自己本身。對於調用自己本身的函數,我們一般稱之為為遞歸。
在遞歸函數中主要包含兩部分:
1.當函數之間返回值時,有基本實例
2.遞歸實例,包括一個或者多個問題較小部分的遞歸引用
關鍵在於將問題分解為小部分,遞歸不能永遠的執行下去,否則就成了所謂的死迴圈。因為在遞歸中總以最小可能性問題結束,而這些問題有存儲在基本實例中。
1 ''' 2 階乘 3 ''' 4 def factorial(n): 5 if n==1: 6 return n 7 else: 8 return n*factorial(n-1) 9 10 ''' 11 冪 12 ''' 13 def power(x,n): 14 if n==0: 15 return 1; 16 else: 17 return x*power(x,n-1)
3.面向對象
對象:可以看作數據(特性)以及由一系列以存取/操作這樣數據的方法所組成的集合。使用對象替代全局變數和函數的原因有很多,其中對象最重要的優點主要在以下幾方面:
1.多態,可以將不同類的對象使用同樣的操作
2.封裝,對外部世界隱藏對象的工作細節
3.繼承:以通用的類為基礎建立專門的類對象
多態:不知道變數所引用的的對象類型是什麼,還是能對它進行操作,而它也會根據對象(或類)類型的不同而表現出不同的行為。isinstance進行類型/類的檢查
方法:綁定到對象特性上面的函數
封裝:向程式中的其他部分隱藏對象的具體實現細節的原則
方法和函數的區別在於第一個參數是否為self。在類中的方法,預設第一個參數為self,特指當前的引用,而方法咋沒有。
4.異常
在程式中,我們經常會遇到一些臨界的界點情況,比如除數為0等情況。預設的解決辦法是在進行操作之前,對數據進行判斷篩選,但是當情況比較多的時候,這個時候做驗證時就比較麻煩,而且不易於可讀。在python中,存在一種異常處理的機制,使用try .............. except來進行異常的捕獲處理。在正常的程式中,我們也可以使用raise來觸發一個異常,結束當前的操作。
python中自置了比較常用的幾種異常,但是它的基類為exception,我們可以手動的擴展異常的類型,來豐富我們的異常處理。當然我們也可以直接使用基類exception直接捕獲異常,通過try............except Exception, e 使用對象e來輸出異常的信息。
在異常處理中,先執行try中的語句塊,若觸發了異常,則執行except中的語句塊。但是在我們讀取文件時,我們會打開一系列的對象,若這時觸發了異常,不手動關閉這些對象時,會造成記憶體一定的損耗。為了避免這種情況,可以在except後添加finally。即不管前面執行如何,最後都會執行finally的語句塊。這樣就避免了記憶體的損耗。
5.寫在最後
由於前期的文章都是先前自己看完的,在這之前的文章,都只是走馬觀花的看了一次,並再一次對自己做了一個總結。對於後續的文章,需要自己邊看邊思考邊理解,可能文章更新的進度比較慢,儘量保證每周2篇,還請大家諒解。若在文中有什麼沒講清楚或者存在錯誤的地方,希望大家多多批評指出,多多交流,大家共同進步。
如果對你有一定的幫助,麻煩點個贊!
若需要轉載,請標明出處!