欧洲乱码伦视频免费国产-麻豆国产精品专区-无码人妻一区二区三区精品视频-日韩免费一区二区三区超清视频-狠狠躁夜夜躁人人爽超碰97香蕉-日韩精品一区二区三区色欲av-久久人人爽av亚洲精品天堂-激情五月开心综合亚洲-久久精品无码一区二区综合好-开心五月四房播播
Python 大家都该知道的高阶函数-gogo体育网址是多少啊

Python 大家都该知道的高阶函数

2026-01-17 22:15:26投稿人:競(jìng)技寶APP登錄(唐山)有限公司圍觀9861563 評(píng)論

Python 大家都該知道的高階函數(shù)

函數(shù)式編程現(xiàn)在逐漸被廣大開(kāi)發(fā)群體接受 ,越來(lái)越多的開(kāi)發(fā)者們開(kāi)始使用這種優(yōu)雅的開(kāi)發(fā)模式 ,而我們使用函數(shù)式編程最主要的是需要清楚 :

  • 什么是高階函數(shù)(Higher-order Functions)?
  • Python 中高階函數(shù)有哪些?要怎么用?

高階函數(shù)概念

在函數(shù)式編程中,我們可以將函數(shù)當(dāng)作變量一樣自由使用  。一個(gè)函數(shù)接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱(chēng)之為高階函數(shù) 。

舉個(gè)例子:

def high_func(f, arr):    return [f(x) for x in arr]

上面的例子中 , high_func 就是一個(gè)高階函數(shù)。其中第一個(gè)參數(shù) f 是一個(gè)函數(shù) ,第二個(gè)參數(shù) arr 是一個(gè)數(shù)組,返回的值是數(shù)組中的所有的值在經(jīng)過(guò) f 函數(shù)計(jì)算后得到的一個(gè)列表 。例如:

from math import factorialdef high_func(f, arr):    return [f(x) for x in arr]def square(n):    return n ** 2# 使用python自帶數(shù)學(xué)函數(shù)print(high_func(factorial, list(range(10))))# print out: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]# 使用自定義函數(shù)print(high_func(square, list(range(10))))# print out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Python 常用高階函數(shù)

如同 java、scala 等語(yǔ)言 ,我們很多常用的高階函數(shù)基本都一致。在開(kāi)發(fā)中我們經(jīng)常使用的最基本的高階函數(shù)其實(shí)就幾個(gè),而我們也可以基于這些函數(shù)去進(jìn)行適當(dāng)?shù)臄U(kuò)展,那么下面開(kāi)始介紹幾種常用的高階函數(shù)。

map

Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.

根據(jù)提供的函數(shù)對(duì)指定序列做映射, 并返回映射后的序列,定義:

map(func, *iterables) -->map object
  • function # 序列中的每個(gè)元素需要執(zhí)行的操作, 可以是匿名函數(shù)
  • *iterables # 一個(gè)或多個(gè)序列

正如前面所舉的例子 high_func 函數(shù), map 函數(shù)是 high_func 函數(shù)高階版,可以傳入一個(gè)函數(shù)和多個(gè)序列。

from math import factorialdef square(n):    return n ** 2# 使用python自帶數(shù)學(xué)函數(shù)facMap = map(factorial, list(range(10)))print(list(facMap))# print out: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]# 使用自定義函數(shù)squareMap = map(square, list(range(10)))print(list(squareMap))# print out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

可以看到輸出了同樣的結(jié)果  ,只是與 python2.X 不同的是, python3.X 中返回 map 類(lèi)  ,而前者直接返回一個(gè)列表。

我們使用匿名函數(shù)  ,也可以傳入多個(gè)序列 ,如下圖

# 使用匿名函數(shù)lamMap = map(lambda x: x * 2, list(range(10)))print(list(lamMap))# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]# 傳入多個(gè)序列mutiMap = map(lambda x, y: x+y, list(range(10)), list(range(11, 15)))print(list(mutiMap))# print out: [11, 13, 15, 17]

reduce

Apply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value.

大致上來(lái)講 , reduce 函數(shù)需要傳入一個(gè)有兩個(gè)參數(shù)的函數(shù),然后用這個(gè)函數(shù)從左至右順序遍歷序列并生成結(jié)果 ,定義如下:

reduce(function, sequence[, initial]) ->value