我试图在python中使用Lambda函数将数字加倍,但无法理解函数,这是因为我开始学习python。职能如下:
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11))我只需要了解这段代码是如何工作的。任何帮助都将不胜感激。
发布于 2022-10-31 06:04:06
def myfunc(n): # this function is taking input n and returning a function object
return lambda a : a * n # this function is taking input as a and we are returning this function object
mydoubler = myfunc(2) # now we are calling the returned function object if you print(mydoubler)-> this will give you function object
print(mydoubler(11)) # here we are calling the lambda function with parameters如果您想在没有lambda的情况下实现它,那么可以使用partial。
from functools import partial
def double(n, a):
return a * n
def my_func1(n):
return partial(double,n)
mydoubler = my_func1(2)
print(mydoubler(11))发布于 2022-10-31 06:05:06
您的myfunc函数创建并返回一个闭包。在本例中,它返回一个返回其参数时间n的函数。棘手的部分是n引用了myfunc特定调用帧中的值。在您的示例中,n具有2值。n的实例是特定于对myfunc的特定调用的。因此,如果您在一行中多次调用myfunc,并为n设置了几个不同的值,则每个返回的lambda函数都将引用与其他值无关的n的唯一值。
注意,lambda的使用是可选的。它只是一个匿名函数的缩写。例如,您可以将myfunc编写为:
def myfunc(n):
def f(a):
return a * n
return f也会产生同样的结果。
回到最初的问题,这里有一个多个闭包共存的例子:
def myfunc(n):
def f(a):
return a * n
return f
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(mydoubler(11))
print(mytripler(11))这将打印22和33。这是因为mydoubler和mytripler分别引用了不同的n实例。
n的值甚至可以通过调用返回的闭包来修改。例如:
def myfunc(n):
def f(a):
nonlocal n
n += a
return n
return f
func = myfunc(100)
print(func(1))
print(func(5))这将打印101和106。在本例中,nonlocal声明是必需的,因为f将n分配给n。如果没有它,n将被视为f的本地特性。
https://stackoverflow.com/questions/74259216
复制相似问题