基礎(chǔ)學(xué)完了榄攀,這幾個python高階函數(shù)一起來看看吧!

嗨金句!朋友檩赢,我是酷頭

歡迎來到學(xué)習(xí)python的寶藏基地~~~

今天給大家介紹python的幾種高級函數(shù),一起來看看吧违寞!

Lambda 函數(shù)

Lambda 函數(shù)是一種比較小的匿名函數(shù)——匿名是指它實際上沒有函數(shù)名贞瞒。

Python 函數(shù)通常使用如下樣式來定義,

deffunction_name():

pass

但對于 lambda 函數(shù)趁曼,我們根本沒為它命名军浆。這是因為 lambda 函數(shù)的功能是執(zhí)行某種簡單的表達式或運算,而無需完全定義函數(shù)挡闰。

lambda 函數(shù)可以使用任意數(shù)量的參數(shù)乒融,但表達式只能有一個。

下面我們來看一下普通函數(shù)和lambda函數(shù)的區(qū)別

普通函數(shù)求圓面積

#?求圓面積

importmath

defcirclearea(r):

result?=?math.pi*r*r

returnresult

r?=10

print('圓面積為:',?circlearea(r))

'''

圓面積為:314.1592653589793

'''

lambda函數(shù)求圓面積

#?求圓面積

importmath

r?=10

result?=lambdar:math.pi*r*r

print('圓面積為:',?result(r))

'''

圓面積為:314.1592653589793

'''

再來看看lambda函數(shù)在列表推導(dǎo)式中的那些使用

指定范圍內(nèi)的數(shù)值列表

importrandom

#?生成10-100之間的隨機列表

list??=?[random.randint(10,100)forxinrange(10)]

print(list)

'''

[83,?95,?16,?43,?66,?24,?11,?92,?38,?85]

'''

根據(jù)列表條件生成指定的列表

#?每月拿出月薪的30%存定期

salary?=?[8000,8100,8200,8500,7800,7988,8888]

save_sal?=?[int(x*0.3)forxinsalary]

print('每月存款數(shù)目:',?save_sal)

'''

每月存款數(shù)目:?[2400, 2430, 2460, 2550, 2340, 2396, 2666]

'''

通過列表篩選生成新的列表

#?找出成績大于等于80的學(xué)生

score?=?[80,81,72,75,98,79,88]

result?=?[xforxinscoreifx?>=80]

print('成績大于等于80的學(xué)生:',?result)

'''

成績大于等于80的學(xué)生:?[80, 81, 98, 88]

'''

看它多么簡單摄悯!我們執(zhí)行了一些簡單的數(shù)學(xué)運算赞季,而無需定義整個函數(shù)。這是 Python 的眾多特征之一奢驯,這些特征使它成為一種干凈申钩、簡單的編程語言。

lambda函數(shù)還可以跟一些內(nèi)置函數(shù)一起使用瘪阁,接下來一起看看吧撒遣!


filter()函數(shù)


filter()?函數(shù)用于通過指定條件過濾序列,過濾掉不符合條件的元素管跺,返回一個迭代器對象义黎,如果要轉(zhuǎn)換為列表,可以使用 list()?來轉(zhuǎn)換豁跑。

該接收兩個參數(shù)廉涕,第一個為函數(shù),第二個為序列贩绕,序列的每個元素作為參數(shù)傳遞給函數(shù)進行判斷火的,

然后返回 True 或 False壶愤,最后將返回 True 的元素放到新列表中淑倾。

語法如下:

filter(function,?iterable)

方法1:求出當(dāng)前列表內(nèi)的所有奇數(shù)

#?取出列表內(nèi)所有奇數(shù)

defif_odd(n):

returnn?%2==1

odd_list?=?list(filter(if_odd,?[8,9,7,5,7,6,2,4,3]))

print(odd_list)

'''

[9,?7,?5,?7,?3]

'''

方法2:求出當(dāng)前列表內(nèi)的所有偶數(shù)

#?取出列表內(nèi)所有偶數(shù)

list_num?=?[8,9,7,5,7,6,2,4,3]

list_even?=?list(filter(lambdax:?x?%2==0,?list_num))

print(list_even)

'''

[8,?6,?2,?4]

'''


map()函數(shù)

和filter()函數(shù)類似,map()?會根據(jù)提供的函數(shù)對指定序列做映射征椒。

第一個參數(shù) function 以參數(shù)序列中的每一個元素調(diào)用 function 函數(shù)娇哆,返回包含每次 function 函數(shù)返回值的新列表。

map() 函數(shù)語法:

map(function,?iterable,?...)

#?求平方

defsquare(x):

returnx*x

new_list?=?list(map(square,?[8,9,7,5,7,6,2,4,3]))

print(new_list)

'''

[64,?81,?49,?25,?49,?36,?4,?16,?9]

'''

或者使用lambda表達式

#?求平方

new_list1?=?list(map(lambdax:x*x,?[8,9,7,5,7,6,2,4,3]))

print(new_list1)

'''

[64,?81,?49,?25,?49,?36,?4,?16,?9]

'''


reduce() 函數(shù)

在 Python3 中,reduce() 函數(shù)已經(jīng)被從全局名字空間里移除了碍讨,

它現(xiàn)在被放置在 functools 模塊里治力,

如果想要使用它,則需要通過引入 functools 模塊來調(diào)用 reduce() 函數(shù):

fromfunctoolsimportreduce

reduce()函數(shù)常用于對一個集合做一些累計操作勃黍,表示對iterable中的每個元素和上次調(diào)用函數(shù)后的結(jié)果進行運算宵统。

來看例子

#?求列表之和

fromfunctoolsimportreduce

list?=?[8,9,7,5,7,6,2,4,3]

sum?=?reduce(lambdax,?y:?x+y,?list)

print(sum)#?51?=?8+9+7+5+7+6+2+4+3

fromfunctoolsimportreduce

#?求0-100之和

defadd(x,?y):

returnx+y

sum?=?reduce(add,?range(1,101))

print(sum)

'''

5050

'''

Range()函數(shù)

range() 函數(shù)用于生成一個新的 range 類型,多用于 for 循環(huán)語句中覆获,用于生成指定范圍的整數(shù)马澈。range() 函數(shù)的語法格式如下:

range(start,end,step)

range()函數(shù)接收的參數(shù)必須是整數(shù),

不能是浮點數(shù)等其他數(shù)據(jù)類型弄息,否則會提示類型錯誤痊班。

在使用range()函數(shù)時,

如果只有一個參數(shù)摹量,那么表示指定的是stop結(jié)束整數(shù)涤伐;

如果是兩個參數(shù),則表示指定的是start開始整數(shù)和end結(jié)束整數(shù)缨称;

只有三個參數(shù)都存在時凝果,最后一個參數(shù)才表示step步長。

foriinrange(11):

print(f'第{i}個數(shù)是:',?i)

'''

第0個數(shù)是:?0

第1個數(shù)是:?1

第2個數(shù)是:?2

第3個數(shù)是:?3

第4個數(shù)是:?4

第5個數(shù)是:?5

第6個數(shù)是:?6

第7個數(shù)是:?7

第8個數(shù)是:?8

第9個數(shù)是:?9

第10個數(shù)是:?10

'''

將生成的序列轉(zhuǎn)換成列表

print(list(range(5)))

'''

[0,?1,?2,?3,?4]

'''

print(list(range(5,16)))

'''

[5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15]

'''

print(list(range(0,100,20)))

'''

[0,?20,?40,?60,?80]

'''


reversed ()函數(shù)

reversed() 函數(shù)用于反轉(zhuǎn)一個序列對象睦尽,將其元素從后向前顛倒構(gòu)建成一個新的迭代器豆村,reversed() 函數(shù)的語法格式如下:

reversed(seq)

反轉(zhuǎn)的對象可以是序列,如列表骂删、元組掌动、字符串或 range 對象等。

#字符串反轉(zhuǎn)

str1?='人生短短幾個秋啊'

rev_str?=?list(reversed(str1))

print(str1)

print(''.join(rev_str))

'''

人生短短幾個秋啊

啊秋個幾短短生人

'''

#?列表反轉(zhuǎn)

list1?=?list(range(5,11))

rev_list?=?list(reversed(list1))

print(list1)

print(rev_list)

'''

[5,?6,?7,?8,?9,?10]

[10,?9,?8,?7,?6,?5]

'''

tuple1?=?tuple(range(1,6))

rev_tup?=?tuple(reversed(tuple1))

print(tuple1)

print(rev_tup)

'''

(1,?2,?3,?4,?5)

(5,?4,?3,?2,?1)

'''


sorted() 函數(shù)

sorted() 函數(shù)用于對可迭代對象進行?排序宁玫,返回一個重新排序的列表粗恢,當(dāng)使用該函數(shù)進行排序后,原列表的元素順序不變欧瘪。語法格式如下:

sorted(iterable,?key=None,?reverse=False):

排序的對象可以是列表眷射、字符串、字典等

grade_list?=?[656,602,610,618,663,695,622,645,677,640]#?10名600分以上的學(xué)生成績列表

#?升序列表:?[602,?610,?618,?622,?640,?645,?656,?663,?677,?695]

print(f"升序列表:{sorted(grade_list)}")#?升序排序

#?降序列表:?[695,?677,?663,?656,?645,?640,?622,?618,?610,?602]

print(f"降序列表:{sorted(grade_list,?reverse=True)}")#?降序排序


zip() 函數(shù)

zip() 函數(shù)用于將可迭代的對象作為參數(shù)佛掖,將對象中對應(yīng)的元素打包成一個個元組妖碉,然后返回由這些元組組成的 zip 對象。語法格式如下:

zip(*iterables)?-->?zip?object參數(shù)說明:

iterables:可迭代對象芥被,如列表欧宜、字典、元組拴魄、字符串等冗茸,zip() 函數(shù)允許多個可迭代對象作為參數(shù)席镀。

當(dāng) zip() 函數(shù)沒有參數(shù)時,則返回空的迭代器夏漱。

當(dāng) zip() 函數(shù)只有一個參數(shù)時豪诲,則從參數(shù)中依次取一個元素組成一個元組,再將依次組成的元組組合成一個新的迭代器挂绰。

當(dāng) zip() 函數(shù)有兩個參數(shù)時屎篱,分別從兩個參數(shù)中依次各取出一個元素組成元組,再將依次組成的元組組合成一個新的迭代器葵蒂。

列表合并生成列表

#?生成列表

name_list?=?["Amo","Paul","Jason","Seven"]

age_list?=?[18,19,20,21]

print(list(zip(name_list,?age_list)))

'''

[('Amo',?18),?('Paul',?19),?('Jason',?20),?('Seven',?21)]

'''

列表合并生成字典

#?生成字典

name_list?=?["Amo","Paul","Jason","Seven"]

age_list?=?[18,19,20,21]

print(dict(zip(name_list,?age_list)))

'''

{'Amo':?18,?'Paul':?19,?'Jason':?20,?'Seven':?21}

'''

矩陣轉(zhuǎn)換

x?=?[1,2,3]

y?=?[4,5,6]

z?=?[7,8,9]

print(list(zip(x,?y,?z)))

'''

[(1,?4,?7),?(2,?5,?8),?(3,?6,?9)]

'''

本文詳細介紹了幾種事半功倍的python高級函數(shù)芳室,

先收藏起來。

有興趣的讀者可以嘗試自己動手練習(xí)一下刹勃。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堪侯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荔仁,更是在濱河造成了極大的恐慌伍宦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乏梁,死亡現(xiàn)場離奇詭異次洼,居然都是意外死亡,警方通過查閱死者的電腦和手機遇骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門卖毁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來票堵,“玉大人赡盘,你說我怎么就攤上這事术羔∷涑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵沃但,是天一觀的道長琢歇。 經(jīng)常有香客問我谆甜,道長媒鼓,這世上最難降的妖魔是什么届吁? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮绿鸣,結(jié)果婚禮上疚沐,老公的妹妹穿的比我還像新娘。我一直安慰自己潮模,他們只是感情好亮蛔,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著再登,像睡著了一般尔邓。 火紅的嫁衣襯著肌膚如雪晾剖。 梳的紋絲不亂的頭發(fā)上锉矢,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天梯嗽,我揣著相機與錄音,去河邊找鬼沽损。 笑死灯节,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绵估。 我是一名探鬼主播炎疆,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼国裳!你這毒婦竟也來了形入?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缝左,失蹤者是張志新(化名)和其女友劉穎亿遂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渺杉,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蛇数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了是越。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳舅。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倚评,靈堂內(nèi)的尸體忽然破棺而出浦徊,到底是詐尸還是另有隱情,我是刑警寧澤天梧,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布辑畦,位于F島的核電站,受9級特大地震影響腿倚,放射性物質(zhì)發(fā)生泄漏纯出。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一敷燎、第九天 我趴在偏房一處隱蔽的房頂上張望暂筝。 院中可真熱鬧,春花似錦硬贯、人聲如沸焕襟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸵赖。三九已至务漩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間它褪,已是汗流浹背饵骨。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茫打,地道東北人居触。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像老赤,于是被迫代替她去往敵國和親轮洋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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