【讀書筆記】_函數(shù)

函數(shù)中返回的元素的數(shù)目,以及 python 實(shí)際返回的對(duì)象

1.python函數(shù)傳參的方式有以下幾種:

備注:傳參按照數(shù)量分為固定參數(shù)和可變參數(shù),固定參數(shù)有關(guān)鍵字+默認(rèn),可變參數(shù)是參數(shù)組。

1.1、關(guān)鍵字參數(shù),就是傳參的時(shí)候可以只傳值(參數(shù)值),但要求與函數(shù)的參數(shù)順序一致;也可以帶上參數(shù)名,(參數(shù)名=參數(shù)值),該情況就是關(guān)鍵字參數(shù),可以不需要按照函數(shù)的參數(shù)順序。

1.2、默認(rèn)參數(shù),就是給參數(shù)附一個(gè)默認(rèn)的值,如果調(diào)用函數(shù)時(shí)給該參傳了新值,以新值為準(zhǔn),如果沒傳,使用默認(rèn)值,備注要求默認(rèn)參數(shù)要放到參數(shù)最后面,(參數(shù)名1,參數(shù)名2,默認(rèn)參數(shù)=3)

1.3、參數(shù)組,就是參數(shù)值是元祖和字典,func(*tuple_grp_nonkw_args, **dict_grp_kw_args),其中的 tuple_grp_nonkw_args 是以元組形式體現(xiàn)的非關(guān)鍵字參數(shù)組, dict_grp_kw_args 是裝有關(guān)鍵字參數(shù)的字典,字典中鍵為參數(shù)名,值為相應(yīng)的參數(shù)值。

備注:(1).可變長(zhǎng)的參數(shù)元組必須在位置和默認(rèn)參數(shù)之后;(2).參數(shù)順序是:關(guān)鍵字參數(shù)、默認(rèn)參數(shù)、參數(shù)組(可變參數(shù))

2.裝飾器(@):

2.1、裝飾器是在函數(shù)調(diào)用之上的修飾,裝飾器的語(yǔ)法以@開頭,接著是裝飾器函數(shù)的名字可選的參數(shù)。緊跟著裝飾器聲明的是被修飾的函數(shù),和裝飾函數(shù)的可選參數(shù)。裝飾器看起來會(huì)是這樣:

@decorator(dec_opt_args)

def func2Bdecorated(func_opt_args):

2.2、可以考慮在裝飾器中置入通用功能的代碼來降低程序復(fù)雜度。例如,可以用裝飾器來:

? ? a.引入日志

? ? b.增加計(jì)時(shí)邏輯來檢測(cè)性能

? ? c.給函數(shù)加入事務(wù)的能力

3.函數(shù)式編程

3.1、匿名函數(shù)與 lambda

匿名函數(shù)的語(yǔ)法:

lambda [arg1[, arg2, ... argN]]: expression參數(shù)是可選的,如果使用的參數(shù)話,參數(shù)通常也是表達(dá)式的一部分

核心筆記:lambda 表達(dá)式返回可調(diào)用的函數(shù)對(duì)象。

用合適的表達(dá)式調(diào)用一個(gè) lambda 生成一個(gè)可以像其他函數(shù)一樣使用的函數(shù)對(duì)象。它們可被傳入給其他函數(shù),用額外的引用別名化,作為容器對(duì)象以及作為可調(diào)用的對(duì)象被調(diào)用(如果需要的話,可以帶參數(shù))。當(dāng)被調(diào)用的時(shí)候,如果給定相同的參數(shù)的話,這些對(duì)象會(huì)生成一個(gè)和相同表達(dá)式等價(jià)的結(jié)果。它們和那些返回等價(jià)表達(dá)式計(jì)算值相同的函數(shù)是不能區(qū)分的

3.2、舉例如下:

def add(x, y): return x + y? ? ? <=> ?函數(shù)名=lambda x, y: x + y

def usuallyAdd2(x, y=2): return x+y? <=> ?函數(shù)名=lambda x, y=2: x+y

如:a = lambda x, y=2: x + y ?—> ? ?a(3)=5

4.內(nèi)建函數(shù)

4.1、filter(odd, allNums),返回一個(gè)列表,odd代表提供篩選的函數(shù),allNums代表待處理的列表,filter的作用是將allNums列表中的數(shù)據(jù)通過odd函數(shù)篩選后,保留返回True的數(shù)據(jù)組成新的列表;

4.2、map(odd, allNums),返回一個(gè)列表,odd代表運(yùn)算的函數(shù),allNums代表待處理的列表,filter的作用是將allNums列表中的數(shù)據(jù)通過odd函數(shù)運(yùn)算后,返回函數(shù)結(jié)果的數(shù)據(jù)組成新的列表;map((lambda x: x+2), [0, 1, 2, 3, 4, 5]) => [2, 3, 4, 5, 6, 7];map(lambda x, y: (x+y, x-y), [1,3,5], [2,4,6]) => [(3, -1), (7, -1), (11, -1)]。

5.變量的作作用域

5.1、全局變量與局部變量

當(dāng)搜索一個(gè)標(biāo)識(shí)符的時(shí)候,python 先從局部作用域開始搜索。如果在局部作用域內(nèi)沒有找到那個(gè)名字,那么就一定會(huì)在全局域找到這個(gè)變量否則就會(huì)被拋出 NameError 異常,如果找到一個(gè)名字,搜索就不會(huì)繼續(xù)去尋找一個(gè)全局域的變量,故局部變量可的優(yōu)先級(jí)高于同名的全局變量。

6.生成器

生成器是一個(gè)帶 yield 語(yǔ)句的函數(shù)。一個(gè)函數(shù)或者子程序只返回一次,但一個(gè)生成器能暫停執(zhí)行并返回一個(gè)中間的結(jié)果----那就是 yield 語(yǔ)句的功能, 返回一個(gè)值給調(diào)用者并暫停執(zhí)行。當(dāng)生成器的 next()方法被調(diào)用的時(shí)候,它會(huì)準(zhǔn)確地從離開地方繼續(xù)(當(dāng)它返回[一個(gè)值以及]控制給調(diào)用者時(shí))——可嘗試用于功能測(cè)試半自動(dòng)化。


生成器1


生成器2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容