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

时间:2018-06-16 06:05:35

标签: python function python-internals

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

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

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

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

4 个答案:

答案 0 :(得分:2)

函数就像Python中的其他所有对象一样。为函数分配函数就像分配字符串或列表一样 - 就像那些一样,为对象创建一个新的引用。

答案 1 :(得分:1)

由于在python中,所有内容都是对象(即使函数都是一等对象),因此,当您定义函数'x'并将其分配给变量(name)'y'时,除了将名称绑定到对象“ x”。 对于此声明,

y=x()

名称y绑定到功能x的范围。所以,

y() 

绑定到x的函数调用。

答案 2 :(得分:0)

通过为变量赋值:

y = x
x()对象的引用存储在变量 y

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

y()

使用存储的引用

调用函数 x

答案 3 :(得分:0)

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

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

x现在是函数类型的对象

def test(func):
    func()

test(x)

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

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

{{1}}

会输出:

  

这是一个函数x

希望我能帮忙!