4

我有这个:

>>> a = lambda : lambda x : x * x 

这每次都给我一个不变的地址:

>>> a
<function <lambda> at 0x7f22769e76e0>
>>> a
<function <lambda> at 0x7f22769e76e0>
>>> a
<function <lambda> at 0x7f22769e76e0>

然而,事实并非如此。为什么这样?还要注意它只给出了两个地址?为什么这样?内部 lambda 函数是动态创建并在每次调用时返回的a()吗?不是在声明 a 时创建的吗?

>>> a()
<function <lambda> at 0x7f22769e7320>
>>> a()
<function <lambda> at 0x7f22769e75f0>
>>> a()
<function <lambda> at 0x7f22769e7320>
>>> a()
<function <lambda> at 0x7f22769e75f0>
4

2 回答 2

2

a是函数本身,作为变量。它的地址不会改变,除非它以某种方式在内存中移动。

a()实际调用函数。一个函数在通过 调用之前不会做任何事情()。所以是的,这里你的内部 lambda 函数正在动态创建。那将是您在那里看到的地址。正如 Blckknght 评论的那样,垃圾收集可能会导致内存的重用。

于 2013-08-14T02:06:02.527 回答
1

是的,您的理解是正确的:“内部”lambda 仅在评估“外部”lambda 时创建,直到它(外部)被调用时才会发生。

于 2013-08-14T02:05:20.927 回答