這幾個Python高階函式的用法你會嗎?

2021-10-04 07:09:08 字數 2541 閱讀 5309

1. map()函式

map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。

def f(x):

return x * x

l = map(f,[1,2,3,4,5])

list(l)

[1,4,9,16,25]

2. reduce()函式

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

其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

from functools import reduce

def fn(x, y):

return x * 10 + y

reduce(fn, [1, 2, 3, 4, 5])

12345

map和reduce 結合使用把str轉換為int的函式

from functools import reduce

digits =

def str2int(s):

def fn(x, y):

return x * 10 + y

def char2num(s):

return digits[s]

return reduce(fn, map(char2num, s))

filter()函式用於過濾序列

filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。注意到filter()函式返回的是乙個iterator,也就是乙個惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list。

把乙個序列中的空字串刪掉:

def not_empty(s):

return s and s.strip()

list(filter(not_empty,['a','','b',none,' ']))

結果:['a','b','c']

用filter求素數

先構造乙個從3開始的奇數序列

def _old_iter():

n=1while ture:

n = n+2

yield n

然後定義乙個篩選函式:

def _not_divisible(n):

return lambda x: x % n > 0

def primes():

yield 2

it = _odd_iter() # 初始序列

while true:

n = next(it) # 返回序列的第乙個數

yield n

it = filter(_not_divisible(n), it) # 構造新序列

列印1000以內的素數:

for n in primes():

if n < 1000:

print(n)

else:

break

3. sorted 函式

python內建的sorted()函式就可以對list進行排序

sorted([36, 5, -12, 9, -21])

[-21, -12, 5, 9, 36]

sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序

sorted([36, 5, -12, 9, -21], key=abs)

[5, 9, -12, -21, 36]

​sorted(['bob', 'about', 'zoo', 'credit'])

['credit', 'zoo', 'about', 'bob']

預設情況下,對字串排序,是按照ascii的大小比較的,由於'z' < 'a',結果,大寫字母z會排在小寫字母a的前面

sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower)  忽略大小寫排序

['about', 'bob', 'credit', 'zoo']

要進行反向排序,不必改動key函式,可以傳入第三個引數reverse=true

sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower, reverse=true)

['zoo', 'credit', 'bob', 'about']

幾個高階函式

高階函式 把函式當成引數進行傳遞的函式。1.sorted iterable,key,reverse 其中的key是乙個函式引數。sorted list1,key 函式 通過key這個函式指定規則 dict1 對dict1按分數排序 sorted dict1 此時按建排序 result sorted ...

重溫這幾個屌爆的Python技巧!

我已經使用python程式設計有多年了,即使今天我仍然驚奇於這種語言所能讓 表現出的整潔和對dry程式設計原則的適用。這些年來的經歷讓我學到了很多的小技巧和知識,大多數是通過閱讀很流行的開源軟體,如django,flask,requests中獲得的。下面我挑選出的這幾個技巧常常會被人們忽略,但它們在...

高階函式與Python3幾個內建函式

這篇文章簡談高階函式與python3中幾個內建函式的例題 高階函式就是能接受函式作引數的函式。我們知道變數可以指向函式,而函式的引數可以接受變數,乙個函式可以接收另乙個函式作為引數,能接受函式作為引數的函式就是高階函式。比如說,乙個簡單的高階函式 def shu 1 print 宇宙之大 def s...