欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python 函數(shù)進階-高階函數(shù)

高階函數(shù)

什么是高階函數(shù)

高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說如果一個函數(shù)的參數(shù)是函數(shù),那么這個函數(shù)就是一個高階函數(shù)。

為耀州等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及耀州網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、耀州網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

高階函數(shù)可以是你使用def關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。

自定義一個高階函數(shù)

我們下面的例子中,函數(shù) senior 的參數(shù)中有一個是函數(shù),那么senior就是一個高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個普通的函數(shù)。

# 定義高階函數(shù)
def senior(func, container):
   """
   將容器中的數(shù)據(jù)依次放入函數(shù)中進行運算,
   將結(jié)果返回到迭代器中,最后返回迭代器。
   """
   lst = list()
   for i in container:
      lst.append(func(i))
   return iter(lst)


# 定義普通的功能函數(shù)
def tenfold(num):
   """
   十倍器
   將數(shù)據(jù)乘 10,返回結(jié)果。
   """
   return num * 10


# 定義一個列表
lst = [10, , 'msr']

# 使用高階函數(shù)
it = senior(tenfold, lst)
print(list(it)) # [100, , 'msrmsrmsrmsrmsrmsrmsrmsrmsrmsr']

常用的內(nèi)置高階函數(shù)

函數(shù) 功能作用
map 處理可迭代對象中的數(shù)據(jù),將處理的結(jié)果返回到迭代器中。
filter 過濾可迭代對象中的數(shù)據(jù),將過濾好的數(shù)據(jù)返回到迭代器中。
reduce 處理可迭代對象中的數(shù)據(jù),將最終的結(jié)果返回出來。
sorted 排序可迭代對象中的數(shù)據(jù),將排序好的結(jié)果返回出來。

map函數(shù)

語法:map(function, Iterable)

參數(shù)說明

function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);

iterable:可迭代對象,可迭代性數(shù)據(jù)。(容器類型數(shù)據(jù)和類容器類型數(shù)據(jù)、range對象、迭代器)

功能

把可迭代對象中的數(shù)據(jù)一個一個拿出來,然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個迭代器。

實例

將列表中的元素轉(zhuǎn)成整型類型,然后返回出來。

lst = ['1', '2', '3', '4']

""" 使用常規(guī)的寫法 """
new_lst = list()
for i in lst:
    new_lst.append(int(i))
print(new_lst)  # [1, 2, 3, 4]


""" 使用map函數(shù)實現(xiàn) """
it = map(int, lst)
new_lst = list(it)
print(new_lst)  # [1, 2, 3, 4]

列表中的每一個數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實現(xiàn)功能。

lst = [1, 2, 3, 4]

""" 普通的方法,利用左移 """
new_lst = list()
for i in lst:
	res = i << i
	new_lst.append(res)
print(new_lst)  # [2, 8, 24, 64]


""" 使用map函數(shù) """
# 先定義一個左移函數(shù),自定義的函數(shù)必須是一個帶參函數(shù)并且有返回值
def func(num):
	return num << num
new_lst = list(map(func, lst))
print(new_lst)  # [2, 8, 24, 64]


""" 使用lambda簡化 """
new_lst = list(map(lambda num: num << num, lst))
print(new_lst)  # [2, 8, 24, 64]

filter函數(shù)

語法:filter(function, iterable)

參數(shù)的意義和map函數(shù)一樣

功能

filter用于過濾數(shù)據(jù),將可迭代對象中的數(shù)據(jù)一個一個的放入函數(shù)中進行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。

實例

保留容器中的偶數(shù)

lst = [11, 2, 3, 34, 4, 4, 55]

""" 常規(guī)寫法 """
new_lst = list()
for i in lst:
   if i % 2 == 0:
      new_lst.append(i)
print(new_lst)  # [2, 34, 4, 4]


""" 使用filter函數(shù) """
def func(num):
   if num % 2 == 0:
      return True
new_lst = list(filter(func, lst))
print(new_lst)  # [2, 34, 4, 4]


""" filter + lambda """
new_lst = list(filter(lambda num: True if (num % 2 == 0) else False, lst))
print(new_lst)  # [2, 34, 4, 4]

reduce函數(shù)

語法:reduce(function, iterable)

參數(shù)含義與map、filter一致。

功能

計算數(shù)據(jù),將可迭代對象的中的前兩個值放在函數(shù)中做出運算,得出結(jié)果在和第三個值放在函數(shù)中運算得出結(jié)果,以此類推,直到所有的結(jié)果運算完畢,返回最終的結(jié)果。

根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個參數(shù)才可以。

實例

reduce函數(shù)使用需要先從標(biāo)準(zhǔn)庫functools中導(dǎo)入

將列表中的數(shù)據(jù)元素組合成為一個數(shù),

from functools import reduce

lst = [2, 0, 6, 6, 6]


""" 常規(guī)方法 """
char = str()
for i in lst:
   char += str(i)
print(int(char))    # 


""" 使用reduse函數(shù) """
def func(x, y):
   return x * 10 + y
res = reduce(func, lst)
print(res)  # 


""" reduce + lambda """
res = reduce((lambda x, y: (x * 10 + y)), lst)
print(res)  # 

sorted函數(shù)

語法:sorted(Iterable, key=function, reverse=False)

參數(shù)說明

iterable:可迭代對象;

key:指定函數(shù),默認為空;

reverse:排序的方法,默認為False,意為升序;

功能

如果沒有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進行運算,根據(jù)數(shù)據(jù)的結(jié)果進行排序,返回新的數(shù)據(jù),不會改變原有的數(shù)據(jù)。

注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對原數(shù)據(jù)進行排序,而不是排序計算之后的就結(jié)果數(shù)據(jù)。

實例

將列表中的數(shù)據(jù)進行排序。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 使用列表的內(nèi)置函數(shù)進行排序,默認升序 """
lst.sort()
print(lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
# 降序排序
lst.sort(reverse=True)
print(lst)  # [2345, 342, 34, 23, 12, 12, 6, 5, 1, -3]


lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]
""" 使用sorted進行排序 """
new_lst = sorted(lst)
print(new_lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
print(lst)      # [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

還有一點就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進行處理,然后根據(jù)結(jié)果進行排序。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 按照絕對值進行排序 """
new_lst = sorted(lst, key=abs)
print(new_lst)  # [1, -3, 5, 6, 12, 12, 23, 34, 342, 2345]


""" 按照除以10的余數(shù)進行排序 """
def func(num):
   return num % 10
new_lst = sorted(lst, key=func)
print(new_lst)  # [1, 342, 12, 12, 23, 34, 5, 2345, 6, -3]

# 可以看到,我們指定函數(shù)之后排序的結(jié)果既不是原數(shù)據(jù)的絕對值、也不是原數(shù)據(jù)除以10的余數(shù),而是根據(jù)這兩種計算結(jié)果對原數(shù)據(jù)進行了排序。

sort和sorted

既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?

  1. sorted可以排序一切可迭代對象,但是sort只是列表的內(nèi)置函數(shù),只能對列表進行排序;
  2. sorted排序返回新的數(shù)據(jù),不改變原數(shù)據(jù),sort改變了原數(shù)據(jù);
  3. sorted可以指定函數(shù),根據(jù)函數(shù)的計算結(jié)果、按照某一種方式進行排序,但是sort只能單純的根據(jù)數(shù)字大小和ASCII進行排序。

總結(jié)

高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。

map(Function,Iterable)(將可迭代性數(shù)據(jù)中的元素一一取出放入函數(shù)中進行運算在將結(jié)果返回,最后返回的數(shù)據(jù)類型是迭代器)

filter(Function,Iterable)(過濾數(shù)據(jù),將可迭代性數(shù)據(jù)放入函數(shù)中進行運算,結(jié)果為真將數(shù)據(jù)返回,反之舍棄,最會返回的數(shù)據(jù)類型是迭代器)

reduce(Function,Iterable)(計算數(shù)據(jù),將可迭代型數(shù)據(jù)中的前兩個元素拿出放入函數(shù)中進行運算將結(jié)果在與后一個元素進行運算,最后返回最終的結(jié)果)

sorted(Iterable,[key=Function],[reverse =Bool(False(default)/True)])(將可迭代型數(shù)據(jù)進行排序,或?qū)⒖傻蛿?shù)據(jù)放入函數(shù)中進行運算將結(jié)果進行排序返回)

分享題目:Python 函數(shù)進階-高階函數(shù)
URL標(biāo)題:http://chinadenli.net/article2/dsogpic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站微信公眾號、網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
亚洲国产四季欧美一区| 亚洲品质一区二区三区| 欧美野外在线刺激在线观看| 在线观看视频日韩精品| 亚洲中文字幕一区三区| 色婷婷成人精品综合一区| 国产一级二级三级观看| 国产无摭挡又爽又色又刺激| 欧美日韩校园春色激情偷拍 | 国产精品不卡免费视频| 国产一区二区三区四区免费| 欧美国产精品区一区二区三区 | 国产一区二区精品丝袜| 真实国产乱子伦对白视频不卡| 久久99精品国产麻豆婷婷洗澡| 正在播放玩弄漂亮少妇高潮| 草草视频福利在线观看| 日韩精品亚洲精品国产精品| 日本少妇三级三级三级| 欧美日韩亚洲综合国产人| 黄片在线免费观看全集| 日本高清视频在线播放| 九九热精品视频在线观看 | 91精品国产av一区二区| 欧美国产日本高清在线| 日韩人妻中文字幕精品| 欧美多人疯狂性战派对| 日本大学生精油按摩在线观看| 亚洲午夜福利不卡片在线| 中文字幕区自拍偷拍区| 91亚洲国产成人久久精品麻豆| 亚洲欧美国产精品一区二区| 成人精品一级特黄大片| 亚洲性生活一区二区三区| 日本午夜免费福利视频| 国产精品刮毛视频不卡| 色涩一区二区三区四区| 99久热只有精品视频免费看| 久久国产青偷人人妻潘金莲| 麻豆蜜桃星空传媒在线观看| 免费黄片视频美女一区|