def?calc_prod(lst):
????def?lazy_prod():????#1
????????def?f(x,?y):
????????????return?x?*?y
????????return?reduce(f,?lst)
????return?lazy_prod????#2
print?calc_prod([1,?2,?3,?4])()為什么不加#1,2就會報錯?TypeError: 'int' object is not callable
2 回答

天使之翼死神之鐮
TA貢獻(xiàn)81條經(jīng)驗 獲得超102個贊
你這個是python的閉包,建議好好學(xué)習(xí)下,calc_prod([1,?2,?3,?4])()后面有括號說明前面calc_prod([1,?2,?3,?4])是個方法句柄,所以調(diào)用該方法后必須返回一個方法句柄,即不帶()的方法名,整個代碼相當(dāng)于執(zhí)行了lazy_prod()。

lanrong1995
TA貢獻(xiàn)2條經(jīng)驗 獲得超0個贊
def calc_prod(lst):
? ?def f(x, y):
? ? ? ?return x * y
? ?return reduce(f, lst)
print calc_prod([1, 2, 3, 4])
這樣就可以跑了,你在calc_prod后面多加了一個括號
添加回答
舉報
0/150
提交
取消