Python中更好的函数组合

Cha*_*s R 11 python functional-programming clojure function-composition

我在Python工作.最近,我发现了一个名为fn的精彩小包.我一直在用它来进行功能组合.

例如,而不是:

baz(bar(foo(x))))
Run Code Online (Sandbox Code Playgroud)

用fn,你可以写:

(F() >> foo >> bar >> baz)(x) .
Run Code Online (Sandbox Code Playgroud)

当我看到这个时,我立刻想到了Clojure:

(-> x foo bar baz) .
Run Code Online (Sandbox Code Playgroud)

但请注意,在Clojure中,输入位于左侧.我想知道这在python/fn中是否可行.

Ble*_*der 11

你不能复制确切的语法,但你可以做类似的事情:

def f(*args):
    result = args[0]

    for func in args[1:]:
        result = func(result)

    return result
Run Code Online (Sandbox Code Playgroud)

似乎工作:

>>> f('a test', reversed, sorted, ''.join)
' aestt'
Run Code Online (Sandbox Code Playgroud)