因为在使用函数时,一旦调用完,函数内部的变量都会被销毁,如果要用函数内的变量进行进一步操作,比如:求和。将会变得麻烦。所以我们可以在函数内,部再定义一个函数。
闭包定义:
函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数,称为闭包。
闭包的作用:
闭包可以引用外部函数变量,且用完不销毁。
注意:
由于外部函数的变量没有被及时释放,所以会消耗内存。
代码演示:
# 闭包的定义格式
def outer():
n = 1
def inner():
print(n)
# 在外函数返回内函数的引用时,不能带()
return inner
ret = outer()
print(ret)
闭包的使用:
def pperson(name):
def say(msg):
print(name + " says:" +msg)
return say
syh = pperson('syh')
qkj = pperson('qkj')
syh('hello')
qkj('ikun')
同样效果的面向对象:
class person(object):
def __init__(self,name):
self.name = name
def say(self,msg):
print(self.name + ' says:' + msg)
syh = person('tom')
jack = person('jack')
syh.say('hello')
jack.say('fuck')
如何通过闭包内修改外函数的变量:
def outer():
n = 1
def inner():
# 当在内函数中要修改外函数变量时,要用nonlocal声明 类似于globa
nonlocal n
n = n + 10
print(n)
return inner
func = outer()
func()
func()