函數
- 概念
- 函數創建和調用
- 空函數
- 函數的定義與調用
- 查看函數文檔
- 函數返回值
- 函數的優勢
- 變量作用域
- 局部變量
- 全局變量
- global
- 函數參數傳遞
- 形參與實參
- 參數檢查
- 默認參數
- 可變參數
- 拆包
- 關鍵字參數
- 參數組合
- 匿名函數
- 應用
- 遞歸函數
- 概念
- 求階乘
- 漢諾塔
概念
如果在開發程序時,需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨立功能的代碼塊組織為一個小模塊,這就是函數.
函數創建和調用
空函數
定義一個什么事也不做的空函數,可以用 pass 語句;
pass 可以用來作為占位符,還沒想好怎么寫函數的代碼,就可以先放一個 pass ,讓代碼能運行起來
函數的定義與調用
查看函數文檔
函數返回值
所謂“返回值”,就是程序中函數完成一件事情后,最后給調用者的結果.
沒有返回值,默認返回None
函數的優勢
從理論上說,不用函數,也能夠編程,我們在前面已經寫了程序,就沒有寫函數,當然,用python的內建函數姑且不算了。現在之所以使用函數,主要是:
- 降低編程的難度(分而治之的思想)
- 代碼重用。避免了重復勞動,提供了工作效率。
變量作用域
局部變量
- 局部變量,就是在函數內部定義的變量
- 不同的函數,可以定義相同的名字的局部變量,但是各用個的不會產生影響
- 局部變量的作用,為了臨時保存數據需要在函數中定義變量來進行存儲,這就是它的作用
全局變量
- 在函數外邊定義的變量叫做全局變量
- 全局變量能夠在所有的函數中進行訪問
- 如果在函數中修改全局變量,那么就需要使用global進行聲明,否則出錯
- 如果全局變量的名字和局部變量的名字相同,那么使用的是局部變量的
- 小技巧: 強龍不壓地頭蛇(就近原則)
global
global的本質是聲明可以修改全局變量的指向, 即變量可以指向新的數據。
1). 不可變類型的全局變量: 指向的數據不能修改, 不使用global時無法修改全局變量。
2). 可變類型的全局變量: 指向的數據可以修改, 不使用global時可以修改全局變量。
函數參數傳遞
形參與實參
- 定義時小括號中的參數,用來接收參數用的,稱為 “形參”
- 調用時小括號中的參數,用來傳遞給函數用的,稱為 “實參”
參數檢查
調用函數時,如果參數個數不對,Python 解釋器會自動檢查出來,并拋出 TypeError;
- 如果參數類型不對,Python 解釋器就無法幫我們檢查。
- 數據類型檢查可以用內置函數 isinstance 實現
默認參數
默認參數可以降低調用函數的難度。
默認參數注意事項:
有多個參數時,變化大放前面,變化小的放后面;
必選參數在前,默認參數在后
默認函數容易出錯點
:
試一試:先定義一個函數,傳入一個 list,添加一個 END 再返回.
eg:
可變參數
可變參數就是傳入的參數個數是可變的,可以是 1 個、2 個到任意個,還可以是 0 個。*args
拆包
如果已經有一個 list 或者 tuple,要調用一個可變參數怎么辦?
1). Python 允許你在 list 或 tuple 前面加一個 * 號;
2). 把 list 或 tuple 的元素變成可變參數傳進去;
eg:
largs = [1,2,3]
func(largs[0],largs[1],largs[2])
func(*largs)
關鍵字參數
- 關鍵字參數允許傳入 0 個或任意個含參數名的參數;
- 這些關鍵字參數在函數內部自動組裝為一個 dict;
- 關鍵字參數用**kwargs;
參數組合
- 參數組合是指可以必選參數、 默認參數、 可變參數和關鍵字參數一起使用。
- 參數定義的順序必須是:必選參數、 默認參數、可變參數和關鍵字參數。
匿名函數
匿名函數指一類無須定義標識符的函數或子程序。Python用lambda語法定義匿名函數,只需用表達式而無需申明。(省略了用def聲明函數的標準步驟)
lambda函數的語法只包含一個語句,如下:
lambda arg1[, arg2,...argn]: expression
lambda函數能接收任何數量的參數但只能返回一個表達式的值
應用
遞歸函數
概念
一個函數在內部調用自己本身,這個函數就是遞歸函數。
求階乘
漢諾塔
def test(n, a, b, c):
if n == 1:
print(a, '--->', c)
return
else:
test(n - 1, a, c, b) # 先將n-1個從a移到b
test(1, a, b, c) # 再將最后一個從a移到c
test(n - 1, b, a, c) # 再將n-1個從b移到c
test(3, 'A', 'B', 'C')
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
