首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Lambda的Python中的双数字

使用Lambda的Python中的双数字
EN

Stack Overflow用户
提问于 2022-10-31 05:51:53
回答 2查看 49关注 0票数 -1

我试图在python中使用Lambda函数将数字加倍,但无法理解函数,这是因为我开始学习python。职能如下:

代码语言:javascript
复制
def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))

我只需要了解这段代码是如何工作的。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2022-10-31 06:04:06

代码语言:javascript
复制
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

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2022-10-31 06:05:06

您的myfunc函数创建并返回一个闭包。在本例中,它返回一个返回其参数时间n的函数。棘手的部分是n引用了myfunc特定调用帧中的值。在您的示例中,n具有2值。n的实例是特定于对myfunc的特定调用的。因此,如果您在一行中多次调用myfunc,并为n设置了几个不同的值,则每个返回的lambda函数都将引用与其他值无关的n的唯一值。

注意,lambda的使用是可选的。它只是一个匿名函数的缩写。例如,您可以将myfunc编写为:

代码语言:javascript
复制
def myfunc(n):
    def f(a):
        return a * n

    return f

也会产生同样的结果。

回到最初的问题,这里有一个多个闭包共存的例子:

代码语言:javascript
复制
def myfunc(n):
    def f(a):
        return a * n

    return f

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11))
print(mytripler(11))

这将打印2233。这是因为mydoublermytripler分别引用了不同的n实例。

n的值甚至可以通过调用返回的闭包来修改。例如:

代码语言:javascript
复制
def myfunc(n):
    def f(a):
        nonlocal n
        n += a
        return n

    return f

func = myfunc(100)

print(func(1))
print(func(5))

这将打印101106。在本例中,nonlocal声明是必需的,因为fn分配给n。如果没有它,n将被视为f的本地特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74259216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档