核心点:在python里,一切都是对象,函数也是对象!
当执行完def定义之后,会在内存里创建一个函数对象,并指向函数名所在的变量里。
例如,
def print_star(n):
print("*"*n)
print(id(print_star))
c = print_star
print(id(c))
#运行结果print(id(print_star))和print(id(c))是一样的。
内存分析图如下:
内存分析图.png
当函数定义完成后,会在堆内存里创建一个函数对象,并将地址传递给栈内存里的变量,print_star;
内存分析图.png
c = print_star,在栈内存里,创建一个新的变量c,指向函数对象。
因此,调用函数c(),也会通过引用,找到堆内存中的函数对象,并执行。