我正在学习Python中的lambda函数。如果我编写了一个lambda表达式行而未将其分配给某些函数名称,我以后可以通过其在内存或id中的地址来调用该lambda函数吗?还是我可以使用一些“指针”(例如C语言中的内容)来指向那部分内存?在下面的图片中,您可以看到我写了两次lambda表达式,发现它们在内存中具有相同的地址,但是如果我将“ lambda x:x ** 2”分配给变量a,则该地址是不同的。我想根据其在内存中的地址使用该lambda函数“ lambda x:x ** 2”。
1 回答

繁星coding
TA贡献1797条经验 获得超4个赞
您在两个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概念。
添加回答
举报
0/150
提交
取消