python三函數(shù)式編程

  1. 函數(shù)概念

函數(shù)本身也可以賦值給變量陈瘦,即:變量可以指向函數(shù)解滓。函數(shù)名同時是變量

  1. 高階函數(shù)

一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),該函數(shù)稱為“高階函數(shù)”

def add(x, y, f):
    return f(x) + f(y)
x ==> -5
y ==> 6
f ==> abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 11
  1. map_reduce_filter_sorted
  • map:map(f,[x1,x2,x3])=[f(x1),f(x2),f(x3)]
>>> def f(x):
...     return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
  • reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> def fn(x, y):
...     return x * 10 + y
...
>>> def char2num(s):
...     return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579
  • 整理成一個str2int的函數(shù)就是:
def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn, map(char2num, s))
  • filter:和map()類似给赞,filter()也接收一個函數(shù)和一個序列初婆。和map()不同的時蓬坡,filter()把傳入的函數(shù)依次作用于每個元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素磅叛。
#去除空的字符串
def not_empty(s):
    return s and s.strip()
filter(not_empty, ['A', '', 'B', None, 'C', '  '])
# 結(jié)果: ['A', 'B', 'C']
  • sorted:
#逆序輸出
def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]
  1. 函數(shù)作為返回值

不返回函數(shù)的結(jié)果渣窜,而是返回具體的函數(shù),有關(guān)參數(shù)和變量都保存在返回的函數(shù)中宪躯,這種稱為“閉包(Closure)”。返回的函數(shù)并沒有立刻執(zhí)行位迂,而是直到調(diào)用了f()才執(zhí)行访雪,每次調(diào)用返回的函數(shù)都屬于不同的對象。

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs
f1, f2, f3 = count()
print("f1:%s,f2:%s,f3:%s" % (f1(), f2(), f3()))
#結(jié)果 f1:9,f2:9,f3:9

返回函數(shù)不要引用任何循環(huán)變量掂林,或者后續(xù)會發(fā)生變化的變量臣缀。
優(yōu)化:再創(chuàng)建一個函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值泻帮,無論該循環(huán)變量后續(xù)如何更改精置,已綁定到函數(shù)參數(shù)的值不變÷嘣樱可以這樣理解為上一個返回的函數(shù)參數(shù)仍為引用脂倦,并未直接返回值

def counts():
    fs=[]
    for i in range(1,4):
        def f(j):
            def g():
                return j*j
            return g
        fs.append(f(i))
    return fs
f4, f5, f6 = counts()
print("f1:%s,f2:%s,f3:%s" % (f4(), f5(), f6()))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市元莫,隨后出現(xiàn)的幾起案子赖阻,更是在濱河造成了極大的恐慌,老刑警劉巖踱蠢,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件火欧,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苇侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門赶盔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榆浓,你說我怎么就攤上這事于未。” “怎么了哀军?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵沉眶,是天一觀的道長。 經(jīng)常有香客問我杉适,道長谎倔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任猿推,我火速辦了婚禮片习,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹬叭。我一直安慰自己藕咏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布秽五。 她就那樣靜靜地躺著孽查,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坦喘。 梳的紋絲不亂的頭發(fā)上盲再,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音瓣铣,去河邊找鬼答朋。 笑死,一個胖子當(dāng)著我的面吹牛棠笑,可吹牛的內(nèi)容都是我干的梦碗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蓖救,長吁一口氣:“原來是場噩夢啊……” “哼洪规!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起循捺,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤淹冰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巨柒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樱拴,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柠衍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晶乔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珍坊。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖正罢,靈堂內(nèi)的尸體忽然破棺而出阵漏,到底是詐尸還是另有隱情,我是刑警寧澤翻具,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布履怯,位于F島的核電站,受9級特大地震影響裆泳,放射性物質(zhì)發(fā)生泄漏叹洲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一工禾、第九天 我趴在偏房一處隱蔽的房頂上張望运提。 院中可真熱鬧,春花似錦闻葵、人聲如沸民泵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栈妆。三九已至,卻和暖如春厢钧,著一層夾襖步出監(jiān)牢的瞬間鳞尔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工坏快, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憎夷。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓莽鸿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拾给。 傳聞我的和親對象是個殘疾皇子祥得,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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