一、定義函式
定義: 函式是指將一組語句的集合通過乙個名字(函式名)封裝起來,要想執行這個函式,只需呼叫其函式名即可。
在python中,定義乙個函式要使用def
語句,依次寫出函式名、括號、括號中的引數和冒號:
,然後,在縮排塊中編寫函式體,函式的返回值用return
語句返回。
我們可以自定義乙個最簡單的函式:
二、使用函式的好處
1、提高**的復用性
2、讓**更簡潔、簡化**
3、**可擴充套件
三、函式的引數
1.位置引數:
位置引數,是必填的,呼叫函式時不傳會報錯。
我們寫乙個簡單的函式,實現計算乘法的功能。下圖中的a和b就是位置引數。
a,b叫做形參,也就是形式引數。呼叫函式calc時,傳的7和8叫實參,也就是實際引數
我們可以看到傳引數時,7傳給了a,8傳給了b。也就是說傳參順序不能錯。那麼,當引數很多的時候,很難準確的記住各引數位置,就很容易出現錯誤,可以用 形參名=實參 的方式傳參。
比如說上面的那個calc函式也可以使用calc(b=1,a=2)這樣來呼叫,這種呼叫方式叫做關鍵字傳參。
例,運算元據庫的函式。傳參沒有按順序,採用了port = '3306'這種方式,很適合多引數的函式。
2.預設引數:
預設引數就是在定義形參的時候,給函式引數預設賦乙個值,這樣在呼叫函式的時候就算沒有傳值也不會報錯。
所以,預設引數不是必填的,如果給預設引數傳值的話,它就會使用你傳入的值。如果使用預設值引數的話,必須放在位置引數後面定義。
例如:寫乙個函式,實現檔案的讀寫功能。
這裡介紹一下return,return有兩個作用:(1)呼叫完函式後,將結果返回;(2)函式裡面遇到return就立即結束。
另外,如果只寫乙個return,後面什麼也不加,就返回none;如果不寫return,也預設返回none。
小練習:寫乙個判斷密碼的函式
3.不固定引數:
在python函式中,還可以定義可變引數。顧名思義,可變引數就是傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個。不固定引數有兩種,一種是可變引數,一種是關鍵字引數。
可變引數:
可變引數用*來接收,後面想傳多少個引數就傳多少個,如果位置引數、預設值引數、可變引數一起使用的的話,可變引數必須在位置引數和預設值引數後面。可變引數也是非必傳的。
輸出結果如下:
4.關鍵字引數:
可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。請看示例:
輸出結果如下:
使用關鍵字引數的話,呼叫的時候必須使用關鍵字傳參。關鍵字引數也是非必傳的。
四、函式的返回值
五、全域性變數和區域性變數
全域性變數與區域性變數兩者的本質區別就是在於作用域。用通俗的話來理解的話,全域性變數是在整個py檔案中宣告,全域性範圍內都可以訪問;區域性變數是在某個函式中宣告的,只能在該函式中呼叫它,如果試圖在超出範圍的地方呼叫,程式就爆掉了。
在程式最前面定義的都是全域性變數,全域性變數如果要在函式中修改的話,需要加global關鍵字宣告,如果是list、字典和集合的話,則不需要加global關鍵字,直接就可以修改。
執行結果如下:
六、遞迴函式
在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。建議少用遞迴,因為遞迴效率不高,而且最多遞迴999次。由下面的函式能夠很直觀的看出遞迴次數上限
遞迴呼叫的特性:
1. 必須有乙個明確的結束條件
2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
3. 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)
七、內建函式
內建函式是指python自帶的一些函式,直接拿過來能用的
小練習:寫乙個判斷是否為小數的函式。
分析:(1)判斷小數點個數;(2)如果是正小數,小數點左邊和右邊都是純數字;(3)負小數,左邊以『-』開頭,其他部分是數字,右邊是數字。
函式 Python學習筆記(三)
def 函式名 函式體定義 形參是函式完成工作需要的一項資訊,是變元 實參是呼叫函式時傳遞給函式的資訊。def greet user username username是形參 print hello,username.title greet user tom tom 是傳遞給函式的實參hello,t...
Python學習筆記(三) Python函式
def functionname parameters 函式 文件字串 function suite return expression 1 在 python 中,型別屬於物件,變數是沒有型別的。2 python 函式的引數傳遞 在 python 中,strings,tuples,和 numbers...
Python學習筆記(三) 函式基礎
a 1 if a 1 def func print a 1 else def func print a 1 預設引數放在最後 def func x,y,z 3 return x y z 順序傳參 func 1,2 命名傳參 func y 1,x 2 不定長引數 def func var1,var2 ...