不了解此嵌套函数的工作原理

时间:2019-03-24 22:21:17

标签: python

def raise_val(n):
    def inner(x):
        raised = x**n
        return raised
    return inner

square = raise_val(2)
print(square(2))# gives 4 as output

我不知道此嵌套函数的工作原理...还有square(2)为什么输出4?
square不仅仅是变量吗?

4 个答案:

答案 0 :(得分:2)

这在函数式编程语言中被称为高阶函数。 Python也使用这种范例。

高阶函数是一个函数,一个或两个都接受一个函数作为参数和/或返回一个函数作为结果。您的函数raise_val是高阶函数,就意味着它正在返回一个函数。您的变量square具有一个函数(inner)。

当调用raise_val(2)时,您所做的是返回需要评估的部分函数。然后,通过square(2),您将2传递给inner部分函数,​​该函数在您最初调用2时将n用于raise_val(2)

答案 1 :(得分:1)

在python中,函数也是值。

因此,每次调用/_test/b时,都会生成一个新的“内部”函数,该函数的raise_val变量具有不同的常数。

您正在将此新函数分配给变量n,然后调用此新函数。​​

答案 2 :(得分:0)

当您键入square = raise_val(2)时,您需要向n=2提供inner参数,并且raise_val返回内部函数并将其存储在square变量中。

def raise_val(n):
    def inner(x):
        raised = x**n
        return raised
    return inner # This returns a function, not a number!

这就是为什么您稍后可以通过写square(2)致电广场的原因。在这里,您提供了x=2参数。

print(square(2))# gives 4 as output

您所做的等同于打印raise_val(n=2)(x=2)

答案 3 :(得分:0)

逐行说明:

  • def raise_val(n):开始定义功能raise_val,该功能接受n作为参数。

    • def inner(x):raise_val内的inner 中开始定义函数,该函数接受x作为参数
      • raised = x**n将变量raised设置为x(给{{1}的参数)的幂inner(给n的参数) })
      • raise_val返回return raised作为raised的返回值
    • inner返回函数return inner 作为inner
    • 的返回值
  • raise_val设置新变量square = raise_val(2)作为函数square的输出,当使用参数raise_val调用时,该变量将使用数字2并返回平方

  • x用参数print(square(2))调用变量square,因此将2返回到幂2或4,然后打印该幂