当我们将函数分配给名称时,内部会发生什么?

What happens internally when we assign a function to a name?

def x():
    print("This is a function x")

我定义了一个名为 x 的函数并将其分配给 y

y = x
y() # Calling this would call the original function

但是内部发生了什么,它是分配一个指针或引用到函数还是一个我无法理解的类似实例的东西? 还是它给定义了 x 的内存地址一个 link?

通过将函数赋值给变量:

y = x

x()对象的reference存储在变量y

当您通过以下方式将分配的变量作为函数调用时:

y()

这通过使用存储的引用调用函数 x

函数就像 Python 中的其他所有内容一样是对象。将函数分配给一个名称就像分配一个字符串或列表一样 - 与这些一样,会为对象创建一个新的引用。

与(几乎)所有其他编程语言一样,函数是对象

def x(): 
    print("This is a function x")

x 现在是函数类型的对象

y = x 
y() # Calling this would call the original

因此在 y 变量中存储了指向 x-object/function 的指针。如果调用 y(),y 将查找它的 'origin' 并调用 x...

因为所有函数都是对象,所以您也可以将函数作为参数传递:

def test(func):
    func()

test(x)

会输出:

This is a function x

希望能帮到你!

因为在 python 中一切都是对象(甚至函数也是第一个 class 对象)所以,当您定义一个函数 'x' 并将其分配给变量(名称)时 'y' 只不过是名称与对象的绑定 'x'。 对于此声明,

y=x()

名称 y 绑定到函数 x 的作用域。所以,

y() 

绑定到 x 的函数调用。