廖雪峰的Python學習筆記二 函式

2021-07-30 00:25:35 字數 1897 閱讀 4055

在python中,定義乙個函式要使用def語句,依次寫出函式名、括號、括號中的引數和冒號:,然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。

e.g. 自定義求絕對值的函式my_abs()

def

my_abs

(x):

if x>=0:

return x

else:

return -x

小結:

定義函式時,需要確定函式名和引數個數;

如果有必要,可以先對引數的資料型別做檢查;

函式體內部可以用return隨時返回函式結果;

函式執行完畢沒有return語句時,自動return none。

函式可以同時返回多個值,但其實就是乙個tuple。

python的函式定義非常簡單,但靈活度卻非常大。除了正常定義的必選引數外,還可以使用預設引數、可變引數和關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的**。

e.g. 計算x2

的函式

def

power(x,n=2)

s=1while n>0

: n=n-1

s=s*x

return s

設定預設引數時,有幾點要注意:

一是必選引數在前,預設引數在後,否則python的直譯器會報錯(思考一下為什麼預設引數不能放在必選引數前面);

二是如何設定預設引數。

當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。

也可以不按順序提供部分預設引數。當不按順序提供部分預設引數時,需要把引數名寫上。比如呼叫enroll('adam','m',city='tianjin'),意思是,city引數用傳進去的值,其他預設引數繼續使用預設值。

定義預設引數要牢記一點:預設引數必須指向不變物件!

定義可變引數和定義list或tuple引數相比,僅僅在引數前面加了乙個*號。

關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。

小結:

python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。

預設引數一定要用不可變物件,如果是可變物件,執行會有邏輯錯誤!

要注意定義可變引數和關鍵字引數的語法:

*args是可變引數,args接收的是乙個tuple;

**kw是關鍵字引數,kw接收的是乙個dict。

以及呼叫函式時如何傳入可變引數和關鍵字引數的語法:

可變引數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3))

關鍵字引數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過**kw傳入:func(**)

使用*args**kw是python的習慣寫法,當然也可以用其他引數名,但最好使用習慣用法。

使用遞迴函式的優點是邏輯簡單清晰,缺點是過深的呼叫會導致棧溢位。

針對尾遞迴優化的語言可以通過尾遞迴防止棧溢位。尾遞迴事實上和迴圈是等價的,沒有迴圈語句的程式語言只能通過尾遞迴實現迴圈。

python標準的直譯器沒有針對尾遞迴做優化,任何遞迴函式都存在棧溢位的問題。

python廖雪峰教程 學習筆記

如何用字元來描述字元 d匹配數字 digit w匹配字母或數字 word s可以匹配空格 space 表示任意個字元,表示至少乙個字元 表示0個或1個字元,表示n個字元,表示n m個字元 可以匹配任意字元 例如 kongxiangyu w如何做到更精確的匹配?規定數字 字母或者下劃線 0 9a za...

Git 廖雪峰 學習筆記

目錄 git工作區域 git初始化及倉庫建立和操作 初始化新的git倉庫 1.新建資料夾 2.在檔案內初始化git 如何將本地倉庫同步到git 遠端倉庫 1.關聯遠端庫 2.第一次推送master分支的所有內容 3.每次本地提交後,推送最新修改 轉殖 分支管理 1.建立與合併分支 2.解決衝突 3....

git 廖雪峰學習筆記

git的誕生 linus堅決反對cvs和svn等集中式版本控制系統 因為速度慢且需要聯網 bitmover公司授權linux社群商業軟體bitkeeper免費使用權 linus社群牛人試圖破解bitkeeper的協議被bitmover公司發現 bitmover公司收回linux社群bitkeeper...