cs61a Higher order functions

216 阅读1分钟
def combine_funcs(op):
    """combine_funs(OP)(f,g)(x) = OP(f(x),g(x))."""

    def combined(f,g):
        def val(x):
            return op(f(x),g(x))
        return val
    return combined

这是个双层闭包


要做一件事op,必先满足f,g两个操作先,比如吃饺子= 煮饺子 + 饺子沾酱

x="饺子"

def f(x):
    return "煮" + x

def g(x):
    return x + "沾酱"

def op(f,g):
    return "吃饺子=" + f  + "  "+ g


add_func = combine_funcs(op)
eating=add_func(f,g)
r = eating(x)
print r


双层闭包使用原则

先宏观再微观,每次返回较大一层的函数,再传进去小一层的函数,最终传入操作对象

比如上面:先生成 "吃饺子的函数"

再传入吃饺子(煮,沾)

最后传入饺子

整个思路是逆着过来的