我認爲實現這個更好的辦法是:
def compose(*funcs):
chain = lambda f, g: lambda *a, **kw: f(g(*a, **kw))
return reduce(chain, funcs, lambda x: x)
將返回一個新的功能,那就是傳遞給它的函數列表的組成。如果你不關心kwargs,你可以這樣做:
def compose(*funcs):
chain = lambda f, g: lambda *a: f(g(*a))
return reduce(chain, funcs, lambda x: x)
例子:
>>> def compose(*funcs):
... chain = lambda f, g: lambda *a: f(g(*a))
... return reduce(chain, funcs, lambda x: x)
...
>>> remove_newlines = compose(lambda l: "".join(l), lambda s: s.split("\n"))
>>> remove_newlines("hello\n world")
'hello world'
注:python3,減少已移出STDLIB到functools,所以你需要做from functools import reduce
我是什麼?一個數字還是一個函數? –
它的一個索引運行在從頭到尾的所有功能上。導致我想要做的是f1(f2(f3(...... fn(x))) – user2751595
爲什麼你總是在第一次迭代之後從for循環返回? – Eric