我正在学习 Python 中的 lambda 函数。
如果我编写了一个 lambda 表达式行而不将其分配给某个函数名称,我可以稍后通过其在内存中的地址或 id 来调用该 lambda 函数吗?
或者我可以有一些“指针”,比如 C 中的内容来指向那部分内存?
在下图中,您可以看到我写了两次 lambda 表达式,发现它们在内存中具有相同的地址,但是如果将“lambda x:x**2”分配给变量 a,则地址不同。
我想根据它在内存中的地址使用该 lambda 函数“lambda x:x**2”。
谢谢。
您在两个 lambda 定义中看到相同 id 的事实是一个实现细节 - 第一个 lambda 被立即收集(因为没有引用它),因此该 id 可以免费重用,并且恰好被第二个重用。
不,Python 不是 C,activeley 阻止任何直接内存访问。请注意,CPython 的对象 id 是内存地址这一事实也是一个实现细节——它不是语言定义的一部分,其他实现(例如 Jhython)可以自由地使用其他东西作为对象 id。
如果您想使用 lambda(实际上 a function
-lambda
只是语法糖并function
像常规def
语句一样产生一个对象),那么您必须拥有对它的引用(作为变量,作为函数参数 - 这实际上是一个变量 - ,作为集合中的元素,作为对象的属性等)。
请注意,这也不是特定于函数,Python 函数是对象(提示:您可以在 Python 中放置在 LHS 上的所有内容都是对象)并且上述内容适用于所有对象。
我想知道我是否可以根据它在内存中的地址给一个对象起一个名字来调用或使用
你认为foo = lambda x: x*2
在做什么?它“给一个对象一个名字”(或者更确切地说“将一个对象绑定到一个名称”),以便您以后可以使用它,并且绑定(内部)依赖于对象的 id/内存地址/等来访问该对象。
如果您希望了解 Python,您首先需要停止思考 C 概念并学习 Python 概念。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句