【发布时间】:2018-11-25 21:07:35
【问题描述】:
def x():
print("This is a function x")
我定义了一个名为x的函数并将其分配给y
y = x
y() # Calling this would call the original function
但是内部发生了什么,它是分配一个指针或对函数的引用还是我无法理解的类似实例的东西?
或者它是否给出了定义x的内存地址的链接?
【问题讨论】:
-
一个函数被创建并绑定到一个名称 (
x),然后名称y绑定到与x相同的东西(在这种情况下,您的函数)。该函数对象将一直存在,直到没有对其的引用,此时它将被垃圾回收。 -
是的,在内部
y是一个名称绑定到名称x绑定到的同一指针。但最好不要考虑 Python 中的指针。相反,尝试以自己的方式接受 Python 数据模型。您可能会发现这篇文章很有帮助:Facts and myths about Python names and values,由 SO 资深人士 Ned Batchelder 撰写。 -
您可能对
dis模块感兴趣。值得注意的是,这在全局范围(其中变量是来自当前globalsdict 的名称)与在函数范围(其中变量只是堆栈帧的索引)中的作用完全不同。而且我认为仍然存在使用后备的情况...... -
@PM2Ring 在课程视频中,我定义了函数 x 并将 y 分配给 x 稍后 x 被 del x 删除并由 x() 调用,然后解释器说 x 是未定义然后函数 y 由 y() 调用但它被执行。那么是否可以删除函数x的引用,如果是,那么如果x被删除或者它只是一个被删除的对象而不是存储在内存中的程序,那么y如何调用该函数
标签: python function python-internals