Python高階內容(三) reduce

2022-02-23 11:08:00 字數 2645 閱讀 2437

functools.reduce()函式會對引數序列中元素進行累積。函式將乙個資料集合(列表,元組等)中的所有資料進行下列操作:用傳給reduce中的函式 function(有兩個引數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第3個資料用 function 函式運算,最後返回乙個結果。

functools.reduce() 函式語法:

functools.reduce(function,iterable[,initializer])

假設function為bin_func,iterable為seq,則functools.reduce( bin_func, seq ) 的執行流程為:

返回函式計算結果。

以下示例展示了 reduce() 的使用方法:

def

add(x, y):

return x +y

functools.reduce(add, [1, 2, 3, 4, 5]) #

計算列表和:(((1+2)+3)+4)+5

functools.reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])  #

使用 lambda 匿名函式,等價於add(x,y)

functools.reduce函式的實現大致如下:

def reduce(function, iterable, initializer=none):

it =iter(iterable)

if initializer is

none:

value =next(it)

else

: value =initializer

for element in

it: value =function(value, element)

return value

可選引數initializer的預設值為none,functools.reduce函式可簡化為:

def

reduce(function, iterable):

it = iter(iterable) #

返回乙個iterator迭代器

value = next(it) #

取得迭代器it的第1個值,賦值給value

for element in it: #

遍歷迭代器it,取第2,3,4,...,n個元素

value = function(value, element) #

將value(第1個元素)和element(第2個元素)給function,並將結果賦值給value

return value

在掌握了reduce函式的實現原理後,initializer不為none的情況也就很好理解了 -- value的初始值為initializer,element則從迭代器的第1個值開始遍歷

filter()、map()、reduce()是python的函式式程式設計的內容,最基本的用法是替代迴圈,也可以用來實現很多複雜功能:

import

functools

defeven_filter(nums):

return filter(lambda x: x % 2 == 0, nums) #

選擇偶數

defmultiply_by_three(nums):

return map(lambda x: x * 3, nums) #

乘以3def

convert_to_string(nums):

return map(lambda x: '

the number: %s

' % x, nums) #

列印輸出

defpipeline_func(data, fns):

return functools.reduce(lambda

a, x: x(a), fns, data)

if__name__ == "

__main__":

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#巧妙地利用reduce函式,實現了以下語句的功能

#pipeline = convert_to_string(multiply_by_three(even_filter(nums)))

pipeline =pipeline_func(nums, [even_filter, multiply_by_three, convert_to_string])

for element in

pipeline:

print(element)

#

輸出結果

the number: 6the number: 12the number: 18the number: 24the number: 30

python 函式的高階內容

python的函式也是一種值,所有函式都是function 物件,這意味著可以把函式本身賦值給變數,就像把整數 浮點數 列表 元組賦值給變數一樣 定義乙個計算乘方的函式 def pow base,exponent result 1 for i in range 1,exponent 1 result...

python之路 函式高階內容

1 函式巢狀的呼叫 定義函式 defmax2 x,y m x if x y else y 三元運算 結果 if條件成立的結果 if 條件 else if條件不成立的結果 returnm 函式巢狀 defmax4 a,b,c,d res1 max2 a,b res2 max2 res1,c res3 ...

python 高階程式設計 三

decorator 作用在某個函式上面,將其函式指標作為引數傳入,然後新增一些操作,最後返回原來函式 兩種方式,一種是無參的 def decorator func def new func args,kws print add some operations func args,kws return...