我可以根据其内存中的地址或ID调用lambda函数吗?

时间:2018-08-03 09:45:39

标签: python lambda

我正在学习Python中的lambda函数。

如果我编写了一个lambda表达式行而未将其分配给某些函数名称,我以后可以通过其在内存或id中的地址来调用该lambda函数吗?

或者我可以使用一些“指针”(例如C语言中的内容)来指向那部分内存吗?

在下面的图片中,您可以看到我两次编写了lambda表达式,发现它们在内存中具有相同的地址,但是如果我将“ lambda x:x ** 2”分配给变量a,则该地址为不同。

我想根据其在内存中的地址使用该lambda函数“ lambda x:x ** 2”。

谢谢。

1 个答案:

答案 0 :(得分:0)

您看到两个lambda定义都具有相同的id的事实是一个实现细节-第一个lambda是立即收集的(因为没有引用),因此该id可自由重用,而恰好确实被第二个lambda重用一个。

不,Python不是C,activeley会阻止任何直接的内存访问。请注意,CPython的对象ID是内存地址这一事实也是一个实现细节-它不是语言定义的一部分,并且其他实现(例如Jhython)可以随意使用其他对象ID。

如果您想使用lambda(实际上,function-lambda只是语法糖,并且像常规function语句一样产生def对象),那么您必须对其进行引用(作为变量,作为函数参数-实际上是变量-作为集合中的元素,作为对象的属性等)。

请注意,这也不是唯一的函数,Python函数是对象(提示:您可以在Python的LHS上放置的所有对象都是对象),以上对于所有对象都适用。

  

我想知道是否可以根据对象在内存中的地址为它命名以调用或使用

您认为foo = lambda x: x*2在做什么?它“给对象一个名称”(或更准确地说是“将对象绑定到名称”),以便稍后使用,并且绑定(内部)依赖于对象的ID /内存地址/等来访问对象。

如果您希望了解Python,则首先需要停止思考C概念并学习Python概念。