目录
闭包的定义
闭包就是在嵌套函数中,内层函数对外层函数(非全局)的变量的引用。
作用
可以让闭包使用的局部参数常驻内存中,供全局使用。
例子
def content1():
name='小明'
def content2(): #内层函数
print(name) #此时name就是闭包
content1()
content()
怎么检测是否是闭包
使用函数的__closure__方法,如果输出结果为None则表示不是闭包,否则则表示是闭包
def content1():
def content2(): #
name = '小明'
print(name) #此时name不是闭包
content2()
print(content2.__closure__) #输出结果为None
content1()
def content1():
name = '小明'
def content2():
print(name) #此时name是闭包
content2()
print(content2.__closure__)#输出结果为(<cell at 0x00000183F49F6170: str object at 0x00000183F49ED710>,)
content1()
如何在外层直接调用
在嵌套函数中,以返回值的方式返回内层函数名,在调用最外层函数时,要调几层在函数名加几个括号即可
def content1(): # 第一层函数
name = '小明'
print('函数1')
def content2(): # 第二层函数
print(name) # 此时name是闭包
print('函数2')
def content3(): # 第三层函数
print('函数3')
return content3
return content2
content1() # 当只调用第一次函数时
'''
函数1
'''
content1()() # 当调用第二层函数时
'''
函数1
小明
函数2
'''
content1()()() # 当调用第三层函数时
'''
函数1
小明
函数2
函数3
'''