程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 函數

編輯:Python

目錄

定義函數

空函數

參數檢查

返回多個值

調用函數

函數的參數(未完)

位置參數

默認參數

可變參數

命名關鍵字參數(未完)

遞歸函數


函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

函數能提高應用的模塊性,和代碼的重復利用率。

定義函數

格式:

def 函數名():
代碼

空函數

如果想定義一個什麼事也不做的空函數,可以用pass語句(pass可以用來作為占位符):

def nop():
pass

參數檢查

調用函數時,如果參數個數不對,Python解釋器會自動檢查出來,並拋出TypeError。但是如果參數類型不對,Python解釋器就無法幫我們檢查。

返回多個值

返回值是一個tuple!但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。

調用函數

格式:

函數名()

每次調用函數時,函數都會從頭開始執行,當這個函數中的代碼執行完畢後,意味著調用結束了。當然了如果函數中執行到了return也會結束函數。

函數的參數

位置參數

例:

power(x) #x即為位置參數

當括號裡有兩個以上的參數時,實參要按照形參的順序擺放,傳入。

默認參數

默認參數可以簡化函數的調用。最大的好處是能降低調用函數的難度。

def enroll(name,city='Beijing'):
print('name:',name)
print('city:',city)
enroll('Jim')

注意:

一是必選參數在前,默認參數在後,否則Python的解釋器會報錯(思考一下為什麼默認參數不能放在必選參數前面);

二是如何設置默認參數。

當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就可以作為默認參數。

可變參數

在Python函數中,還可以定義可變參數。顧名思義,可變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個。

要定義出這個函數,我們必須確定輸入的參數。由於參數個數不確定,我們首先想到可以把a,b,c……作為一個list或tuple傳進來。但是調用的時候,需要先組裝出一個list或tuple。

定義可變參數和定義一個list或tuple參數相比,僅僅在參數前面加了一個*號。在函數內部,參數numbers接收到的是一個tuple,因此,函數代碼完全不變。但是,調用該函數時,可以傳入任意個參數,包括0個參數。

*nums表示把nums這個list的所有元素作為可變參數傳進去。

命名關鍵字參數(未完)

對於關鍵字參數,函數的調用者可以傳入任意不受限制的關鍵字參數。至於到底傳入了哪些,就需要在函數內部通過kw檢查。

遞歸函數

在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。

遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。

使用遞歸函數需要注意防止棧溢出。解決遞歸調用棧溢出的方法是通過尾遞歸優化,事實上尾遞歸和循環的效果是一樣的,所以,把循環看成是一種特殊的尾遞歸函數也是可以的。

尾遞歸是指,在函數返回的時候,調用自身本身,並且,return語句不能包含表達式。這樣,編譯器或者解釋器就可以把尾遞歸做優化,使遞歸本身無論調用多少次,都只占用一個棧幀,不會出現棧溢出的情況。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved