闭包-函数嵌套
简单理解闭包
def f1():
print("外层函数1")
def f2():
print("内层函数")
return f2
以上就是一个简单的闭包函数代码。
注意:函数名()表示函数的调用,不带括号,函数可以看作是一个变量。
>>> def f1():
print("first")
def f2():
print('second')
return f2
>>> res = f1()
first
>>> res()
second
>>> res()
second
>>> res()
second
函数里嵌套函数,外层函数返回内层函数的函数名,这种情况成为闭包
外层函数的变量为了在函数执行后依然在内存中保留,我们把变量包在内层函数存放,内层函数不调用,不执行,不释放
小实例
def f1(num1):
print('你好,您的第一个乘数为{}'.format(num1))
def f2(num2):
print('你好,您的第二个乘数为{},它们的积为{}'.format(num2,num1*num2))
return f2
>>> total = f1(30)
你好,您的第一个乘数为30
>>> total(40)
你好,您的第二个乘数为40,它们的积为1200
>>> total(50)
你好,您的第二个乘数为50,它们的积为1500
- 函数内的变量,函数外访问不了,因为在不声明的情况下,这是局部变量。
- f2函数执行完毕后,函数内的变量会被摧毁
- 应用场景:如果我们需要在执行完毕后,把函数中的某个变量保存下来
- 操作:在函数内部去定义一个函数,用这个内部函数去引用这个变量,同时将内层函数的函数名当做返回值返回,不调用
- 这个时候内层函数就会将需要保留的变量给包含在它的内存空间了,这就是闭包。