首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个例子背后的逻辑是什么?

这个例子背后的逻辑是什么?
EN

Stack Overflow用户
提问于 2022-01-29 01:05:31
回答 2查看 42关注 0票数 0
代码语言:javascript
复制
def myfunc(n):
  return lambda a : a * n

mytripler = myfunc(3)

print(mytripler(11))

我正在尝试学习python中的lambda函数。我理解w3schools中给出的关于Lambda函数的其他例子。这个例子,然而,我不能绕我的头。怎样才能把3乘以11?

EN

回答 2

Stack Overflow用户

发布于 2022-01-29 01:34:14

注意,lambda没有什么特别之处。这只是创建匿名函数的一种方便的方法。

如果已经编写了代码:

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

这将是完全一样的事情。但是现在我们给匿名函数取了一个名为inner的名字。但是您会发现仍然可以编写mytripler = myfunc(3),而且它的工作方式也是一样的。

Python理解闭包。如果在内部函数中使用了变量(但没有修改),并且在包含函数中定义了同名变量,那么Python就会意识到,内部变量指的是外部变量具有的任何值。

票数 1
EN

Stack Overflow用户

发布于 2022-02-06 19:53:28

让我们退一步:什么是函数?

一个定义可能是这样一个构造:给它参数,它做一些事情,然后返回一个值(让我们暂时忽略不提供任何参数或不接收任何返回值的情况)。

在Python中,因为所有东西都是一个对象,所以这种构造是一个可以指定名称的值。例如:

代码语言:javascript
复制
>>> def example_function(argument):
...     result = argument * 42
...     return result
... 
>>> other_name_for_example_function = example_function
>>> example_function(3)
126
>>> other_name_for_example_function(3)
126
>>> example_function == other_name_for_example_function
True
>>> example_function is other_name_for_example_function
True

注意,在最后进行的比较中,我没有调用这些函数,我只是比较了example_functionother_name_for_example_function的值,它们在本例中是相同的“功能机制”。

现在,lambdas是另一种定义函数的方法,但它更受限制,而且函数不会自动分配名称。让我们以相同的例子为例,但使用lambdas:

代码语言:javascript
复制
>>> example_lambda = lambda argument: argument * 42
>>> other_name_for_example_lambda = example_lambda
>>> example_lambda(3)
126
>>> other_name_for_example_lambda(3)
126
>>> example_lambda == other_name_for_example_lambda
True
>>> example_lambda is other_name_for_example_lambda
True

现在,如果我们将示例的函数调用替换为其内容,则如下所示:

代码语言:javascript
复制
>>> n = 3   # just you see where that value will be used
>>> mytripler = lambda a: a * n
>>> a = 11  # also to see where that value will be used
>>> mytripler(a)
33

所以在你的例子中,

  1. myfunc()提供了一个“函数机制”作为返回值。在“功能机制”的定义中,插入了值3,这是myfunc()
  2. You的一个参数,将名称mytripler赋给返回的
  3. 函数,就像在任何函数

中一样。

这能帮你理解吗?

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

https://stackoverflow.com/questions/70901569

复制
相关文章

相似问题

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