基礎學完了,這幾個python高階函數一起來看看吧!

嗨!朋友,我是酷頭

歡迎來到學習python的寶藏基地~~~

今天給大家介紹python的幾種高級函數,一起來看看吧!

Lambda 函數

Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。

Python 函數通常使用如下樣式來定義,

deffunction_name():

pass

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

lambda 函數可以使用任意數量的參數,但表達式只能有一個。

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

普通函數求圓面積

#?求圓面積

importmath

defcirclearea(r):

result?=?math.pi*r*r

returnresult

r?=10

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

'''

圓面積為:314.1592653589793

'''

lambda函數求圓面積

#?求圓面積

importmath

r?=10

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

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

'''

圓面積為:314.1592653589793

'''

再來看看lambda函數在列表推導式中的那些使用

指定范圍內的數值列表

importrandom

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

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

print(list)

'''

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

'''

根據列表條件生成指定的列表

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

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

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

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

'''

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

'''

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

#?找出成績大于等于80的學生

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

result?=?[xforxinscoreifx?>=80]

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

'''

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

'''

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

lambda函數還可以跟一些內置函數一起使用,接下來一起看看吧!


filter()函數


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

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判斷,

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

語法如下:

filter(function,?iterable)

方法1:求出當前列表內的所有奇數

#?取出列表內所有奇數

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:求出當前列表內的所有偶數

#?取出列表內所有偶數

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()函數

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

第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

map() 函數語法:

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() 函數

在 Python3 中,reduce() 函數已經被從全局名字空間里移除了,

它現在被放置在 functools 模塊里,

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

fromfunctoolsimportreduce

reduce()函數常用于對一個集合做一些累計操作,表示對iterable中的每個元素和上次調用函數后的結果進行運算。

來看例子

#?求列表之和

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()函數

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

range(start,end,step)

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

不能是浮點數等其他數據類型,否則會提示類型錯誤。

在使用range()函數時,

如果只有一個參數,那么表示指定的是stop結束整數;

如果是兩個參數,則表示指定的是start開始整數和end結束整數;

只有三個參數都存在時,最后一個參數才表示step步長。

foriinrange(11):

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

'''

第0個數是:?0

第1個數是:?1

第2個數是:?2

第3個數是:?3

第4個數是:?4

第5個數是:?5

第6個數是:?6

第7個數是:?7

第8個數是:?8

第9個數是:?9

第10個數是:?10

'''

將生成的序列轉換成列表

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 ()函數

reversed() 函數用于反轉一個序列對象,將其元素從后向前顛倒構建成一個新的迭代器,reversed() 函數的語法格式如下:

reversed(seq)

反轉的對象可以是序列,如列表、元組、字符串或 range 對象等。

#字符串反轉

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

rev_str?=?list(reversed(str1))

print(str1)

print(''.join(rev_str))

'''

人生短短幾個秋啊

啊秋個幾短短生人

'''

#?列表反轉

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() 函數

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

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

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

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

#?升序列表:?[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() 函數

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

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

iterables:可迭代對象,如列表、字典、元組、字符串等,zip() 函數允許多個可迭代對象作為參數。

當 zip() 函數沒有參數時,則返回空的迭代器。

當 zip() 函數只有一個參數時,則從參數中依次取一個元素組成一個元組,再將依次組成的元組組合成一個新的迭代器。

當 zip() 函數有兩個參數時,分別從兩個參數中依次各取出一個元素組成元組,再將依次組成的元組組合成一個新的迭代器。

列表合并生成列表

#?生成列表

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}

'''

矩陣轉換

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高級函數,

先收藏起來。

有興趣的讀者可以嘗試自己動手練習一下。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容