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
双层闭包使用原则
先宏观再微观,每次返回较大一层的函数,再传进去小一层的函数,最终传入操作对象
比如上面:先生成 "吃饺子的函数"
再传入吃饺子(煮,沾)
最后传入饺子
整个思路是逆着过来的