高階函數(shù)
python 的函數(shù)不僅能接收普通的參數(shù)罗晕,還可以接收一個(gè)函數(shù)本身作為參數(shù)济欢,這樣的函數(shù)稱為高階函數(shù)
filter() 函數(shù)
filter()
,顧名思義小渊,這個(gè)函數(shù)是一個(gè)過濾器法褥。它接收一個(gè)函數(shù) f 和一個(gè) list,f 是一個(gè)判斷函數(shù)酬屉,對(duì)參數(shù)進(jìn)行判斷之后依據(jù)條件返回 Ture
或 False
半等,filter()
就是用 f 對(duì) list 中的每個(gè)元素進(jìn)行判斷,自動(dòng)過濾掉結(jié)果為 False
的元素呐萨,將符合條件的元素組成的新 list 并返回.
s.strip(rm)
刪除 s 字符串中開頭杀饵、結(jié)尾處的 rm 序列的字符。
當(dāng)rm為空時(shí)谬擦,默認(rèn)刪除空白符(包括'\n', '\r', '\t', ' ')
sorted()函數(shù) 內(nèi)置函數(shù)切距,默認(rèn)按增序排序
但sorted()
也是一個(gè)高階函數(shù),它可以接受一個(gè)比較函數(shù)來實(shí)現(xiàn)自定義排序惨远,比較函數(shù)的定義是谜悟,傳入兩個(gè)待比較的元素x, y话肖,如果x應(yīng)該排在y前面則返回-1,如果x應(yīng)該排在y后面則返回1葡幸,其他返回0
sorted()
函數(shù)返回一個(gè)新的lis
閉包
內(nèi)層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量)最筒,然后返回內(nèi)層函數(shù)的情況,成為閉包(Closure).
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
列表的賦值
對(duì)一個(gè)列表 蔚叨,例如l = ['1', '2', '3']
床蜘,
- 如果將它直接賦值給一個(gè)變量:
a = l
,則a是指向這個(gè)列表對(duì)象的變量蔑水,如果修改a邢锯,則直接修改了列表本身。如下:
>>> a = l
>>> a
['1', '2', '3']
>>> a[0] = '5'
>>> a
['5', '2', '3']
>>> l
['5', '2', '3']
- 假設(shè)列表中一共有n個(gè)元素肤粱,若將列表
l[]
賦值給n個(gè)變量:a1, a2, a3 = l
弹囚,其意義是將列表中的元素賦值給這些變量厨相,此時(shí)a1, a2, a3
分別等于'1', '2', '3'
. - 如果將列表賦值給多個(gè)變量领曼,但是變量數(shù)目不夠n個(gè),則會(huì)報(bào)錯(cuò)蛮穿。
函數(shù)裝飾器
在函數(shù)調(diào)用時(shí)想動(dòng)態(tài)地給函數(shù)增加一些新的功能庶骄,但是又不改變?cè)瘮?shù)的定義,使用函數(shù)裝飾器即可實(shí)現(xiàn)践磅。
函數(shù)裝飾器的本質(zhì)是一個(gè)高階函數(shù)
這樣做可以極大地簡(jiǎn)化代碼单刁,避免每個(gè)函數(shù)編寫重復(fù)代碼
格式:
函數(shù)裝飾器一般是這樣的:
@new_fn
def f1(args):
pass
這就相當(dāng)于:
def f1(args):
pass
f1 = new_fn(f1)
#其中new_fn是一個(gè)接收函數(shù)的高階函數(shù)
*此時(shí),原有的f1()
就被徹底地隱藏了起來府适,調(diào)用f1()
時(shí)只能調(diào)用經(jīng)過裝飾的函數(shù)
偏函數(shù)
有的函數(shù)需要多個(gè)參數(shù)羔飞,偏函數(shù)就是將個(gè)別參數(shù)固定了的新函數(shù)。例如:
def int2(x, base=2):
return int(x, base)
functools.partial
是一個(gè)創(chuàng)建一個(gè)偏函數(shù)的工具檐春,不需要我們自己定義int2()
逻淌,可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(shù)int2
:
>>> import functools
>>> int2 = functools.partial(int2, base=2)
>>> int2('1000000')
64
版權(quán)聲明 自由轉(zhuǎn)載 - 保持署名 - 不可商用 - 不可演繹 (CC3.0 創(chuàng)意共享3.0許可證)