中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談python之高階函數和匿名函數

發布時間:2020-09-20 23:51:13 來源:腳本之家 閱讀:136 作者:strive_cogit 欄目:開發技術

map()

map()函數接收兩個參數,一個是函數,一個是Iterable,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的Iterator返回。

def func(x):
 return x*x

r = map(func, [1, 2, 3, 4, 5])
print(type(r))
r = list(r)
print(r)

輸出結果:

<class 'map'>
[1, 4, 9, 16, 25]

可以看出,map讓函數func作用于列表的每一項,使列表的每一項都被函數func執行一次,即列表的每一項都進行平方。其返回值是map類型。

reduce()

reduce函數必須接收兩個參數,把一個函數作用在一個序列[x1, x2, x3, ...]上,然后再把結果繼續和序列的下一個元素做累積計算。

from functools import reduce

def fn(x, y):
 return x * 10 + y

f = reduce(fn, [1, 3, 5, 7, 9]) # 把序列變為整數
print(f)
print(type(f))

輸出結果:

13579
<class 'int'>

和map不同,雖然reduce也是作用于每個元素,但是reduce的作用結果要用在下次和另一個元素做累積計算。

map()和reduce()的結合使用

from functools import reduce

def fn(x, y):
 return x * 10 + y

def char2num(s):
 digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
 return digits[s]

f = reduce(fn, map(char2num, '13579'))
print(f)

輸出結果:

13579

可以將字符串類型轉換為int類型

filter()

filter()函數用于過濾序列,接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依次作用于每個元素,然后根據返回值是True還是False決定保留還是丟棄該元素。

def not_empty(s):
  return s and s.strip()  # 不能直接寫s.strip()
 
 f = filter(not_empty, ['A', '', 'B', None, 'C', ' '])
 print(type(f))
 print(list(f))

輸出結果:

<class 'filter'>
['A', 'B', 'C']

sorted()

sorted()函數也是一個高階函數,在列表的學習中初步接觸了sorted(),但其實它還可以接收一個key函數來實現自定義的排序。

key指定的函數將作用于被排序對象的每一個元素上,并根據key函數返回的結果進行排序。

l = sorted([36, 5, -12, 9, -21], key=abs) # 按絕對值大小排序
print(l)

s = sorted(['bob', 'about', 'Zoo', 'Credit'])  # 按ASCII大小排序
print(s)

sl = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) # 忽略大小寫排序
print(sl)

sr = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)  # 反向排序
print(sr)

輸出結果:

[5, 9, -12, -21, 36]
['Credit', 'Zoo', 'about', 'bob']
['about', 'bob', 'Credit', 'Zoo']
['Zoo', 'Credit', 'bob', 'about']

同樣的,sorted()也可以對元組和字典進行排序

from operator import itemgetter    # 需要使用operator模塊
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print(sorted(L, key=itemgetter(0)))

輸出結果:

[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

 當然,也能以values的值來排序,對字典的排序與元組類似,但返回值不同。

from operator import itemgetter

dic = {"Bob": 75, "Adam": 92, "Lisa": 88}

print(sorted(dic,key=itemgetter(0)))

print(sorted(dic, key=itemgetter(1)))

 輸出結果:

['Adam', 'Bob', 'Lisa']
['Adam', 'Lisa', 'Bob']

可以看到,不管是以key值進行排序,還是以value值進行排序,排序結果只返回對應順序的key值。

匿名函數

f = list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
print(f)

輸出結果:

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

上面就是一個匿名函數的使用,匿名函數 lambda x: x * x 實際上就是:

 def f(x):
 return x * x

只是在這里沒有顯式地定義函數,這樣因為函數沒有名字,不必擔心函數名沖突,而且代碼看起來也簡潔。

以上所述是小編給大家介紹的python之高階函數和匿名函數詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平泉县| 府谷县| 桃源县| 苍南县| 西贡区| 大安市| 平昌县| 梧州市| 巫溪县| 义乌市| 丰台区| 昌都县| 内乡县| 石景山区| 象州县| 科技| 黑水县| 德钦县| 凌海市| 甘孜| 根河市| 保靖县| 大关县| 广灵县| 南漳县| 上饶市| 易门县| 泾阳县| 古蔺县| 平南县| 丹江口市| 黄山市| 炎陵县| 东海县| 巴林左旗| 晋中市| 高清| 嘉禾县| 抚远县| 阿合奇县| 中江县|