#输出的__closure__有cell元素 :是闭包函数 def func(): name = ‘eva‘ def inner(): print(name) print(inner.__closure__) return inner f = func() f() #输出的__closure__为None :不是闭包函数 name = ‘egon‘ def func2(): def inner(): print(name) print(inner.__closure__) return inner f2 = func2() f2()
一:函数名
1, 函数名的内存地址,print(func)
2, 函数名可以赋值给其他变量
3, 函数名可以当做容器类的元素
def f1(): print(‘f1‘) def f2(): print(‘f2‘) def f3(): print(‘f3‘) l = [f1,f2,f3] d = {‘f1‘:f1,‘f2‘:f2,‘f3‘:f3} # #调用 l[0]() d[‘f2‘]()
4, 函数名可以当做函数的参数.
5, 函数名可以当做函数的返回值.
def func2(): print(222) def func3(x): # print(x) # x=func2() return x f = func2 f() #func2() ret = func3(func2) # ret=func2 ret() #func2() func3(func2)() def f1(): print(‘f1‘) def func1(argv): argv() #f1() return argv f = func1(f1) f()
二:闭包
1, 内层函数,对外层函数(非全局)的变量的引用,叫做闭包。
def func(): name = ‘eva‘ def inner(): print(name) return inner f = func() f()
2, 闭包函数的检测:方法__closure__