我确实试过阅读有关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)
输出为:
in f1, value is : 100
101
103
in f1, value is : 10
<function <lambda> at 0x019C66B0>
105
<type 'function'>
我的问题是:
f(1)
和f(3)
,为什么没有调用print
语句以及何时调用
我们调用f1(100)
为什么没有编译lambda语句。x
中n
与f1
之间的关系是什么。f(5)
将是15(10 + 5)print f1(10)
lambda x:
这里的含义是什么,这个块的x名称是什么?请解释。谢谢大家。
答案 0 :(得分:2)
首先,您应该了解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
内的第一个陈述是:
f = f1(100)
此作业相当于:
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
和n
之间的关系。 'x'被f
的参数替换,'n'被f1
的参数替换。
请解释print f1(10)
f1()
返回对lambda函数的引用。这就是它的印刷品。输出类似于下面代码段中的输出:
>>> def func():
return 5
>>> func
<function func at 0x021F0F30>
除了func
被lambda
替换之外,因为f1仅返回lambda函数。
我认为f(5)将是15(10 + 5)
如果您在前一个语句中将f1
的返回值重新分配给f
,那么您将获得该输出。但是,由于您刚刚打印了f(10)
的值,f
仍然绑定到 - lambda x: x + 100
。所以你得到105
。
然后打印f1
的类型,这只是一个函数:
print type(f1)
答案 1 :(得分:1)
lambda
几乎是另一个功能。要使用它,你也必须调用它。
您将实际的lambda返回到f
,而不是整个函数f1
。除此之外,返回时不会调用lambda。这就是为什么当你致电f(1)
和f(3)
时,它实际上并不运行f1
,而只运行lambda。
还记得我怎么说lambdas就像函数一样?好x
是一个参数,而n
是您在n
中定义的局部变量f1
。
f(5) != 15
,因为您实际上并未在任何地方使用f1(10)
。你只打印它。如果您执行了f = f(10)
,那么它将是15
。
print f1(10)
打印lambda函数(因为这是返回的内容)。它不会调用它,只是打印它。
答案 2 :(得分:1)
lambda只是在一行上编写函数的一种方式。
最初你可能看不到它们中的重点,但是它们可以用于生成许多略有不同的函数,或用于指定只能使用一次的函数或所有其他各种实例。
为了更好地理解,请想象以下代码 - 与您自己的代码略有不同:
def f2(n):
def g2(x):
return x + n
return g2
这非常符合您自己的代码所做的,但是通过在第一个函数中定义一个函数然后返回它。这基本上与您的代码完全相同。