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() 的使用方法:
defadd(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]) #functools.reduce函式的實現大致如下:使用 lambda 匿名函式,等價於add(x,y)
def reduce(function, iterable, initializer=none):可選引數initializer的預設值為none,functools.reduce函式可簡化為:it =iter(iterable)
if initializer is
none:
value =next(it)
else
: value =initializer
for element in
it: value =function(value, element)
return value
def在掌握了reduce函式的實現原理後,initializer不為none的情況也就很好理解了 -- value的初始值為initializer,element則從迭代器的第1個值開始遍歷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
filter()、map()、reduce()是python的函式式程式設計的內容,最基本的用法是替代迴圈,也可以用來實現很多複雜功能:
importfunctools
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...