Python小知識 reduce函式的乙個小坑

2022-06-03 01:15:08 字數 1169 閱讀 5900

今天做python作業的時候,老師給出一段**讓我們判斷能不能順利執行(直接在idle上執行一下就知道了嘛),不能執行的話說明原因並修改

>>> reduce(lambda x, y: x + y, , 6)

老師給的**是這個樣子的:

from functools import

reduce

staff_workingweeks =(,,,

)deff_reduce(accumulator , value):

total = accumulator['

week

'] + value['

week']

return

total

total_week =reduce(f_reduce, staff_workingweeks)

print(total_week)

放在idle裡執行一下試試,呵呵噠當然是報錯啦

這個題本來是想要把這個列表裡字典的week值累加起來,用reduce函式當然是最方便的啦,將f_reduce函式作為引數,f_reduce函式的兩個引數應該是列表中的字典,但是有個bug,f_reduce的返回值是乙個int型別的,而這個返回值通過reduce將會作為第乙個引數傳入f_reduce,而你在函式裡是把它當成字典用的,系統當然會報錯啦

解決方法是把total值改為accumulator+value[『week』],因為在第一次呼叫f_reduce時,accumulator是字典型別,所以我們要給reduce的initializer新增乙個值(老師給的小提示派上了用場),為了不影響結果,這個預設值為0,**和結果如下:

from functools import

reduce

staff_workingweeks =[,,,

]deff_reduce(accumulator , value):

total = accumulator + value['

week']

return

total

total_week =reduce(f_reduce, staff_workingweeks,0)

print(total_week)

再執行一下試試,成功啦~

還是要好好理解函式的本質和呼叫啊。。。

python小知識 Python小知識

1 python是一種解釋性語言,當程式執行時,一行一行的解釋,並執行 優點 除錯 很方便,開發效率高,並且可以跨平台 不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。缺點 執行速度慢。python的種類 cpython ipython pypy jython ironpython ...

python小知識 python小知識

一 列表 l 1,2 m l l和m同時指向列表物件,內容為 1,2 l l 3,4 系統新增了乙個物件,內容為 1,2,3,4 l,m 1,2,3,4 1,2 l 1,2 m l l 3,4 對列表在原處做修改 l,m 1,2,3,4 1,2,3,4 二 python程式設計中的中文編碼問題 問題...

python實用小知識

python是解釋型語言,你的 在執行時會一行一行地翻譯成cpu能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而c程式是執行前直接編譯成cpu能執行的機器碼,所以非常快 如果字串內部既包含 又包含 怎麼辦?可以用轉義字元 來標識,比如 i m ok 表示的字串內容是 i m ok python還允...