如何定义输出另一个函数的函数?

时间:2014-07-28 01:23:07

标签: python functional-programming

我想定义一个函数,它接受一些参数作为输入,并使用它们来创建另一个函数,然后输出新函数。

例如:

makeIncrease(n) - >返回一个带参数的函数,并返回(参数+ n)

applyIncrease(increaseFn,m) - >将increaseFn应用于参数m

所以,如果我这样做:applyIncrease(makeIncrease(n),m) - >将返回m + n

我怎么能在python中做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以在Python中阅读有关装饰器的更多信息。针对您的具体问题:

def applyIncrease(increaseFn, m):
    return increaseFn(m)

def makeIncrease(n):
    def _innerFn(arg):
        return arg + n
    return _innerFn

applyIncrease接受函数和参数,并将函数应用于参数。 makeIncrease接受参数n

假设一个例子,假设n = 2。 makeIncrease(2)返回一个带参数的函数,并为其添加2。

虽然我使用下划线开始_innerFn,但这只是一个惯例 - 装饰器不需要下划线。

另请注意,函数是Python中的第一类对象,makeIncrease返回_innerFn而不是_innerFn()。返回函数与变量或对象引用完全相同 - 没有括号。

以下是解释器中的功能。请注意,对象引用wrapped_function引用_innerFn,即makeIncrease(2)的返回值

>>> wrapped_function = makeIncrease(2)
>>> wrapped_function
<function _innerFn at 0x100496758>
>>> total = applyIncrease(wrapped_function, 3)
>>> total
5

答案 1 :(得分:0)

class Example:
    def result():
        def nestedResult(a,b):
            multiply = a*b
            return multiply
        return nestedResult  


    if __name__ == "__main__":
        x = result()
        print "multiplication_result:", x(1,10)