第二十一課:函數(shù):lambda表達(dá)式

內(nèi)容來(lái)源于網(wǎng)絡(luò)境钟,本人只是在此稍作整理,如有涉及版權(quán)問(wèn)題俭识,歸小甲魚(yú)官方所有吱韭。

練習(xí)題(來(lái)自小甲魚(yú)官方論壇)

0.請(qǐng)使用lambda表達(dá)式將下邊函數(shù)轉(zhuǎn)變?yōu)槟涿瘮?shù)?

def fun_A(x,y=3):
    return x*y

答:
lambda x, y = 3 : x * y


1.請(qǐng)將下邊的匿名函數(shù)轉(zhuǎn)變?yōu)槠胀ê瘮?shù)?

lambda x:x if x%2 else None

答:

def odd(x):
    if x%2:
        return x
    else:
        return None

2.感受一下使用匿名函數(shù)后給你的編程生活帶來(lái)的變化理盆?

答:

1.Python寫(xiě)一些執(zhí)行腳本時(shí)痘煤,使用匿名函數(shù)就可以省下定義函數(shù)過(guò)程,比如說(shuō)我們只是需要寫(xiě)個(gè)簡(jiǎn)單的腳本來(lái)管理服務(wù)器時(shí)間猿规,我們就不需要專門(mén)定義一個(gè)函數(shù)然后再寫(xiě)調(diào)用衷快,使用匿名函數(shù)就可以使得代碼更加精簡(jiǎn)。

2.對(duì)于一些比較抽象并且整個(gè)程序執(zhí)行下來(lái)只需要調(diào)用一兩次的函數(shù)姨俩,有時(shí)候給函數(shù)起個(gè)名字也是比較頭疼的問(wèn)題蘸拔,使用匿名函數(shù)就不需要考慮命名的問(wèn)題了。

3.簡(jiǎn)化代碼的可讀性环葵,由于普通的屌絲函數(shù)閱讀經(jīng)常要跳到開(kāi)頭def定義部分调窍,使用匿名函數(shù)函數(shù)可以省去這樣的步驟。


3.用filter()函數(shù)和lambda表達(dá)式快速求出100以內(nèi)所有3的倍數(shù)张遭?

答:

a = list(filter(lambda x:x%3 == 0,range(1,100)))
print(a)

b = list(filter(lambda x:not(x%3),range(1,100)))
print(b)

c = list(filter(lambda x:x if x%3==0 else None,range(100)))
print(c)

4. 還記得列表推導(dǎo)式嗎邓萨?完全可以使用列表推導(dǎo)式代替filter()和lambda組合,你可以做到嗎菊卷?

答:
[x for x in range(1,100)if x%3==0]


5. 還記得zip嗎缔恳?使用zip會(huì)將兩數(shù)以元祖的形式綁定在一塊,例如:

>>> list(zip([1,3,5,7,9],[2,4,6,8,10]))
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

但如果我希望打包的形式是靈活多變的列表而不是元祖(希望是[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]這種形式)洁闰,你能做到嗎歉甚?(采用map和lambda的表達(dá)式)

答:
list(map(lambda x,y : [x,y],[1,3,5,7,9],[2,4,6,8,10]))
注意:強(qiáng)大的map()后邊是可以接受多個(gè)序列作為參數(shù)的。


補(bǔ)充下內(nèi)置zip()函數(shù)的知識(shí)點(diǎn):zip() 函數(shù)用于將可迭代的對(duì)象作為參數(shù)扑眉,將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組纸泄,然后返回由這些元組組成的列表。
注意:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內(nèi)存腰素,zip() 返回的是一個(gè)對(duì)象聘裁。如需展示列表,需手動(dòng) list() 轉(zhuǎn)換耸弄。

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 返回一個(gè)對(duì)象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped)  # list() 轉(zhuǎn)換為列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c))              # 元素個(gè)數(shù)與最短的列表一致
[(1, 4), (2, 5), (3, 6)] 
>>> a1, a2 = zip(*zip(a,b))   # 與 zip 相反,*zip 可理解為解壓卓缰,返回二維矩陣式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
>>>

6.請(qǐng)目測(cè)一下表達(dá)式會(huì)打印什么计呈?

def make_repeat(n):
    return lambda s:s*n
double=make_repeat(2)
print(double(8))
print(double('fishC'))

輸出:
16
fishCfishC

7.請(qǐng)寫(xiě)下這一節(jié)課你學(xué)習(xí)到的內(nèi)容:格式不限,回憶并復(fù)述是加強(qiáng)記憶的好方式征唬!

  • lambda表達(dá)式的作用:
    1)Python寫(xiě)一些執(zhí)行腳本時(shí)捌显,使用lambda就可以省下定義函數(shù)的過(guò)程,比如說(shuō)我們只是需要寫(xiě)一個(gè)簡(jiǎn)單的腳本來(lái)管理服務(wù)器時(shí)間总寒,我們就不需要專門(mén)定義一個(gè)函數(shù)然后再寫(xiě)調(diào)用扶歪,使用lambda就可以使得代碼更加精簡(jiǎn)。
    2)對(duì)于一些比較抽象并且整個(gè)程序執(zhí)行下來(lái)只需要調(diào)用一兩次的函數(shù),有時(shí)候我們個(gè)函數(shù)起個(gè)名字也是比較頭疼的問(wèn)題善镰,使用lambda就不需要考慮命名問(wèn)題妹萨。
    3)簡(jiǎn)化代碼的可讀性,由于普通的函數(shù)閱讀經(jīng)常要跳到開(kāi)頭def定義部分炫欺,使用lambda函數(shù)可以省去這樣的步驟乎完。
  • 2、兩個(gè)重要的BIF
    1)filter(function or None,iterable):兩個(gè)參數(shù)為函數(shù)和可迭代的序列品洛,函數(shù)定義了過(guò)濾的規(guī)則树姨,默認(rèn)過(guò)濾出真的部分。
>>> list(filter(lambda x : x % 2, range(10)))
[1, 3, 5, 7, 9]
>>> list(filter(None,[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, False, True]))
[1, 2, 3, 4, 5, 6, 7, 8, 9, True]

2)map(function or None,iterable):同filter()的兩個(gè)參數(shù)相同桥状,這個(gè)內(nèi)置函數(shù)的作用是:將序列的每一個(gè)元素作為函數(shù)的參數(shù)進(jìn)行運(yùn)算加工帽揪,直到可迭代序列的每個(gè)元素都加工完畢,返回所有加工后的元素構(gòu)成的新序列辅斟。

>>> list(map(lambda x : x * 2, range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末转晰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砾肺,更是在濱河造成了極大的恐慌挽霉,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件变汪,死亡現(xiàn)場(chǎng)離奇詭異侠坎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)裙盾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)实胸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人番官,你說(shuō)我怎么就攤上這事庐完。” “怎么了徘熔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵门躯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我酷师,道長(zhǎng)讶凉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任山孔,我火速辦了婚禮懂讯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘台颠。我一直安慰自己褐望,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瘫里,像睡著了一般实蔽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上减宣,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天盐须,我揣著相機(jī)與錄音,去河邊找鬼漆腌。 笑死贼邓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闷尿。 我是一名探鬼主播塑径,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼填具!你這毒婦竟也來(lái)了统舀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劳景,失蹤者是張志新(化名)和其女友劉穎誉简,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盟广,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闷串,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筋量。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹吵。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桨武,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呀酸,我是刑警寧澤凉蜂,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站性誉,受9級(jí)特大地震影響蛉顽,放射性物質(zhì)發(fā)生泄漏悼粮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一昧穿、第九天 我趴在偏房一處隱蔽的房頂上張望胶逢。 院中可真熱鬧,春花似錦蜜托、人聲如沸抄囚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幔托。三九已至,卻和暖如春蜂挪,著一層夾襖步出監(jiān)牢的瞬間重挑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工棠涮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谬哀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓严肪,卻偏偏與公主長(zhǎng)得像史煎,于是被迫代替她去往敵國(guó)和親谦屑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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