一、函數(shù)概念
函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。
函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。
二、函數(shù)作用
- 對(duì)某塊功能的代碼的封裝。
- 提高代碼的復(fù)用性(重用性)。
- 大大的提高了開(kāi)發(fā)效率。
三、函數(shù)定義和調(diào)用
定義:
def 函數(shù)名():
pass
調(diào)用:
函數(shù)名()
注意:
- 函數(shù)是一次定義, 多次調(diào)用。
- 如果函數(shù)名相同, 后面的會(huì)覆蓋前面的同名函數(shù)。
四、函數(shù)參數(shù)概念
作用:
- 進(jìn)一步的提高了一個(gè)沒(méi)有參數(shù)函數(shù)的復(fù)用性。
定義格式:
- 形參:形式參數(shù)(有多少個(gè),看需求)。
def 函數(shù)名(形參1, 形參2, ...):
pass
調(diào)用格式:
- 實(shí)參:實(shí)際參數(shù)(有多少個(gè),看形參)。
函數(shù)名(實(shí)參1, 實(shí)參2, ...)
五、函數(shù)返回值
作用:
- 把函數(shù)的內(nèi)部的數(shù)據(jù)拋到函數(shù)的外部途徑。
定義格式:
def 函數(shù)名(形參1, 形參2, ...):
代碼邏輯
return 數(shù)值
調(diào)用格式:
變量名 = 函數(shù)名(實(shí)參1, 實(shí)參2, ...)
參數(shù):
- 函數(shù)外部數(shù)據(jù)傳遞到函數(shù)內(nèi)部。
返回值:
- 函數(shù)內(nèi)部的數(shù)據(jù)拋到函數(shù)的外部。
retrun的作用:
- 結(jié)束函數(shù)。
- 給函數(shù)的調(diào)用者(執(zhí)行者)返回值。
- 只有return -->None。
- return 單個(gè)值:返回單個(gè)值,不改變數(shù)據(jù)類型。
- return 多個(gè)值:以元組的形式返回。
- 沒(méi)有return:默認(rèn)返回None。
六、函數(shù)參數(shù)分類
- 位置參數(shù):按順序一一對(duì)應(yīng),傳值即可。
- 關(guān)鍵字參數(shù):只需要書(shū)寫正確的形參名字。
- 缺省參數(shù):傳值即覆蓋。
- 不定長(zhǎng)參數(shù):
*args,**kwargs。
- 當(dāng)函數(shù)定義的時(shí)候(
*,**的作用):
*,**代表聚合,*將實(shí)參對(duì)應(yīng)的所有位置參數(shù)聚合到一個(gè)元組,賦值給args,**將實(shí)參對(duì)應(yīng)的所有的關(guān)鍵字參數(shù)聚合到一個(gè)字典中,賦值給kwargs。
- 當(dāng)函數(shù)調(diào)用的時(shí)候(
*,**的作用):
*,**代表打散。*是將所有的iterable元素打散成實(shí)參的位置參數(shù)。**是將字典的所有鍵值對(duì)打散成關(guān)鍵字參數(shù)。
<mark>形參的順序:位置參數(shù),*args, 缺省參數(shù), **kwargs</mark>
七、變量類型
1、局部變量
概念:
- 定義在函數(shù)內(nèi)部的變量。
作用域:
- 只能在自己的函數(shù)內(nèi)部使用。
2、全局變量
概念:
- 定義在函數(shù)外部的變量。
作用域:
- 在整個(gè)模塊內(nèi)部。
總結(jié):
- 默認(rèn)情況下,如果函數(shù)內(nèi)部的變量和函數(shù)外部的變量同名,不是一個(gè)變量一個(gè)是全局,一個(gè)是局部。
- 如果想利用函數(shù)修改全局變量的值:
def func():
global 全局變量名
nonlocal:下級(jí)函數(shù)對(duì)上級(jí)函數(shù)非全局變量進(jìn)行修改。
- 如果在函數(shù)內(nèi)部使用一個(gè)變量(順序):首先在函數(shù)內(nèi)部找局部變量,然后在函數(shù)外部的全局變量。
- 局部變量
* 開(kāi)辟內(nèi)存空間, 保存數(shù)據(jù) * 函數(shù)內(nèi)部沒(méi)有可執(zhí)行代碼,局部變量就被銷毀,內(nèi)存回收。
- 全局變量
* 開(kāi)辟內(nèi)存空間, 保存數(shù)據(jù) * 整個(gè)程序沒(méi)有可執(zhí)行的代碼,程序?qū)⑼顺?,全局變量銷毀,內(nèi)存回收。
八、函數(shù)名的應(yīng)用
- 函數(shù)名即函數(shù)地址。
- 函數(shù)名可以作為變量。
- 函數(shù)名可以作為函數(shù)的參數(shù)。
- 函數(shù)名可以作為函數(shù)的返回值。
- 函數(shù)名可以作為容器類類型的元素。
九、閉包
- 內(nèi)層函數(shù)對(duì)外層函數(shù)非全局變量的引用,并將內(nèi)層函數(shù)函數(shù)名返回。
- 機(jī)制:python解釋器遇到閉包,那么這個(gè)空間不會(huì)隨著函數(shù)的結(jié)束而釋放。
- 閉包的應(yīng)用場(chǎng)景:裝飾器、爬蟲(chóng)。
十、迭代器與生成器
迭代器:
- 可迭代對(duì)象:內(nèi)部含有
__iter__方法。 - 迭代器:內(nèi)部含有
__iter__方法和__next__。 - 可迭代對(duì)象–>迭代器iter(可迭代對(duì)象)。
- 迭代器取值
__next__()、next()或for循環(huán)。
生成器:
- 可以理解為一種數(shù)據(jù)類型,這種數(shù)據(jù)類型自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類型需要調(diào)用自己的內(nèi)置的
__iter__方法),所以生成器就是可迭代對(duì)象。
- 生成器函數(shù)(含有yield)。
- 生成器推導(dǎo)式。
