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
不仅仅是变量吗?
答案 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,然后打印该幂