假設我有一個函式串列。[f1, f2, f3] (在python中)
我怎樣才能回傳一個單一的函式F:=f3(f2(f1())) (注意,F是函式型別)。我知道用.reduce()可以做到這一點,但我想知道是否有其他方法可以不使用庫來做到這一點。
編輯:
另外,請注意,串列的長度可以大于3
。我試過:
def func(list) 。
i = 1
new_function = filters[0]
while i<=len( filters)-1。
new_function = filters[i](new_function)
i =1: new_function = filters[i](new_function)
return new_function
但它并不作業
uj5u.com熱心網友回復:你的代碼中的問題是,你用filters[i](new_function)傳遞了一個函式作為引數。
我建議采用這種遞回的解決方案:
def chain(first, *rest)。
return lambda x: first(chain(*rest)(x) if rest else x)
使用實體:
def inc(x)。
return x 1 :.
def double(x)。
return x * 2 :.
def square(x)。
return x * x
f = chain(square, double, inc)
print(f(5) # ((5 1)*2) ** 2 == 144
uj5u.com熱心網友回復:
我看到在你嘗試的代碼中,你從未真正呼叫你的第一個函式。(我也假設你的代碼是這樣開始的。def func(filters):
考慮到f1()不需要任何引數,但其余的都需要前一個函式的回傳引數,這應該可以:
def fit(funcs)。
v = funcs[0]()
for f in funcs[1:] 。
v = f(v)
return v
def f1()。
return 42
def f2(x)。
return x
def f3(x)。
return x
fs = [f1, f2, f3].
a = lambda:fit(fs)
print(a())
輸出。42
uj5u.com熱心網友回復:
def get_single_func(func_list)。
def single_func(*args, **kwargs)。
ret = func_list[0](*args, **kwargs)
for func in func_list[1: ] 。
ret = func(ret)
return ret
return single_func
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326644.html
標籤:
上一篇:在不卸載的情況下將安卓原生應用更新為Flutter[INSTALL_FAILED_UPDATE_INCOMPATIBLE]
下一篇:繪制被分配到一個組的概率圖
