函数也是对象,内存底层分析
python中,“一切都是对象”。实际上,执行def定义函数后,系统就创建了相应的函数对象。执行如下代码,然后解释
def print_star(n):
print("*"*n)
print(print_star)
print(id(print_star))
c=print_star
c(3)
执行结果
<functionprint_starat0x0000000002BB8620>
45844000
***
上面代码执行def时,系统会创建函数对象,并通过print_star这个变量 进行引用:
执行“c=print_star”后,显然将print_star变量的值赋给了变量c,内存图变成了:
显然,我们可以看出变量c和print_star都是指向了同一个函数对象。因此,执行c(3)和执行print_star(3)的效果是完全一致的。Python中会把函数当作普通对象。
如下例子也是,函数可以作为参数来传递,也可作为返回值来返回,c和test01指向同一地址
def test01():
print("sxtsxt")
test01()
c = test01
c()
print(id(test01))
print(id(c))
print(type(c))
执行结果
sxtsxt
sxtsxt
2011947151144
2011947151144
<class 'function'>