我想寫一個函數,獲取作爲參數的函數列表和第一個參數。然後按順序調用它們,將前一個的輸出傳遞給下一個。 (很明顯,爲了這個工作,所有的函數必須要有相同數量的參數並返回相同數量的值)。如何將函數的輸出傳遞給另一個函數作爲輸入?
這裏是我的嘗試:
def chain(functions, *first_func_params):
params = first_func_params
for func in functions:
params = func(*params)
但是這隻有當所有函數返回元組(「多值」)或其他序列類型,因爲只有序列類型可以解壓到的參數列表功能。
如果函數只返回單個值,則chain
不起作用。
我可能只是檢查func
的輸出是否是一個元組,並相應地採取行動。但是,有沒有更優雅的解決方案?
你將如何實現這一點?
我想我的建議是不寫這個函數:-)。有太多的角落案例可能會讓人非常驚訝。例如你傳遞'[foo,bar]','foo'返回一個'namedtuple'('bar'作爲輸入) - 不幸的是,管道失敗了,因爲你的函數組合決定在應該剛剛通過的時候_unpack namedvalue_通過論證。 – mgilson
你可以讓你的函數期望單個元組作爲輸入'f(t)',這樣它就可以手動解包像'a,b,c = t'這樣的參數嗎?那麼在任何情況下返回值也應該是一個元組(例如'return(True,)')。這樣不需要特殊情況 – Pynchia