了解lambda函数

2024-03-28 11:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我确实试着读过Lambda函数,但是没有找到任何链接来解释关于它的流和python解释器处理它的方式的一些问题,或者可能是我无法正确理解它。 我没有什么问题,请有人帮我澄清一下。 代码如下:

def f1(n):
    print 'in f1, value is : ', n
    return lambda x: x+n

if __name__ == '__main__':
    f= f1(100)
    print f(1)
    print f(3)
    print f1(10)
    print f(5)
    print type(f1)

输出为:

^{2}$

我的问题是:

  • For f(1)f(3)为什么没有调用print语句以及何时调用 我们称f1(100)lambda语句未编译的原因。在
  • 函数x和{}之间的关系是什么。在
  • 我以为f(5)会是15(10+5)
  • 请解释print f1(10)
  • 另外,请告诉我lambda x:在这里是什么意思,是这个块的x名称吗?请解释一下。在

谢谢大家。在


Tags: lambda函数代码inisvalue链接def
3条回答

lambda只是在一行上写函数的一种方式。在

最初,您可能看不到其中的要点,但它们可以用于生成许多稍有不同的函数,或指定只能使用一次的函数,或指定所有其他各种实例。在

为了更好地理解这些代码,请设想以下代码-与您自己的代码稍有不同:

def f2(n):

    def g2(x):
        return x + n

    return g2

这与您自己的代码所做的非常相似,但是通过在第一个函数中定义一个函数,然后返回它。这本质上和你的代码一样。在

lambda几乎是另一个函数。要使用它,你也得叫它。在

将实际lambda返回给f,而不是整个函数f1。同时,当你归还lambda时,它不会被调用。这就是为什么当您调用f(1)f(3)时,它实际上并没有运行f1,而只运行lambda。在

还记得我说过lambdas就像函数吗?那么x是一个参数,而n是您在f1中定义的局部变量{}。在

f(5) != 15因为您实际上没有在任何地方使用f1(10)。你只是印出来的。如果你做了f = f(10),那么它就是15。在

print f1(10)打印lambda函数(因为这是返回的函数)。它不叫它,只是打印出来。在

首先,您应该理解Python中的所有东西都是一个对象。功能确实无处不在。在

从您的函数f1(),您实际上返回了对lambda函数的引用。你可以在任何变量中赋值。在

例如:

>>> f = lambda x: x   # Assign reference to lambda function to f.
# Now you can call lambda function using `f`  
>>> f(1)
1

现在,让我们继续你的例子。您的第一个语句在if内是:

^{pr2}$

此作业相当于:

f = lambda x: x + 100  # Replace `n` with `100` in return statment in `f1`.

所以,接下来的两个电话非常接近:

print f(1)  # returns `1 + 100` = 101 (Replace `x` with `1`.
print f(3)  # returns `3 + 100` = 103

现在你得到x和{}之间的关系x'被f的参数替换,而'n'则被f1的参数替换。在

Please explain print f1(10)

f1()返回对lambda函数的引用。这就是它将要打印的内容。输出与您在下面的片段中得到的类似:

>>> def func():
        return 5

>>> func
<function func at 0x021F0F30>

除了将func替换为lambda,因为f1只返回lambda函数。在

I thought f(5) will 15 ( 10 + 5)

如果在前面的语句中将f1的返回值重新分配给f,那么您就可以得到这个输出。但是,由于您刚刚打印了f(10)的值,f仍然绑定到-lambda x: x + 100。所以你得到105。在

然后打印f1类型,它只是一个函数:

print type(f1)

相关问题 更多 >