Python函数返回另一个函数

时间:2017-01-03 16:30:08

标签: python function

我不是python中的专业人士,但我通过这个概念来创建a higher order function。这是一个返回另一个函数的函数。我已经在StackOverflow认真阅读了几乎所有的答案,但我真的不明白,也许我真傻懂,我不想推测。但是,如果有人提供一个直观的指南,可能会提供一个例子,或链接到某人可能会认为更好的答案在堆栈我感激。

这是我坚持的例子。

  

例如,假设您想要定义线性(a,b),它返回一个计算值a * x + b的函数f(x)。使用嵌套作用域:

提供此解决方案

def linear(a, b):
    def result(x):
       return a*x + b
    return result

作为可调用对象

class linear:
   def __init__(self, a, b):
       self.a, self.b = a,b
   def __call__(self, x):
      return self.a * x + self.b

有人请为我说清楚。

1 个答案:

答案 0 :(得分:1)

这可能是帮助理解第一个版本的小指南:

def linear(a, b):
    def result(x):
       return a*x + b
    return result

ret = linear(2, 4)
print(ret)        # <function linear.<locals>.result at 0x7ff7b4148510>
print(type(ret))  # <class 'function'>
print(ret(5))     # 14

和第二个:

class linear:
   def __init__(self, a, b):
       self.a, self.b = a,b
   def __call__(self, x):
      return self.a * x + self.b

lin = linear(2, 4)
print(lin)             # <__main__.linear object at 0x7ff7b415a630>
print(type(lin))       # <class '__main__.linear'>
print(lin(5))          # 14
print(lin.__call__(5)) # 14 (this does exactly the same as the line above)

这有助于清理问题,或者你对这里的代码行有一个具体的问题吗?