Python的闭包

闭包的形成条件:

  1. 函数嵌套
  2. 内部函数使用外部函数的变量或者参数
  3. 外部函数返回内部函数。这个使用外部函数变量的内部函数称为闭包

按照容易理解的意思分析一下

  1. func_out()的返回值是func_inner函数,所以func指代的就是func_inner函数
  2. 调用func函数,实际上调用的是func_inner函数
  3. 内部函数func_inner使用了外部函数func_out的变量num1,并且func_out的返回值是func_inner,形成了闭包
  4. 输出——结果: 15
def func_out():
    num1 = 10
    def func_inner(num2):
        num = num1 + num2
        print('结果:',num)
    return func_inner

# 创建闭包对象
func = func_out()
func(5)

# 结果: 15

分析:

  1. Person(name)返回值是speak,Tom指代的就是speak
  2. 调用Tom(arg)实际调用speak(arg),此时外部函数name参数值为Tom
  3. 则输出——Tom:我是你哥哥
  4. Jerry请自行理解
def person(name):
    def speak(msg):
        print(name+':'+msg)
    return speak

Tom = person('Tom')
Jerry = person('Jerry')

Tom('我是你哥哥')
Jerry('我是老鼠,你是猫')

修改闭包外部函数的变量值

def func_out():
    num1 = 10
    def func_in():
        # 直接给num1赋值其实是在内部函数的定义了一个新的局部变量num1,而不是使用了外部函数变量
        # 要修改闭包外部函数变量使用nonlocal关键字
        nonlocal num1
        num1 = 20
        num = num1 + 10
        print('结果:',num)
    return func_in

func = func_out()
func()

上一篇:使用static 定义内部类。


下一篇:【Java基础学习笔记】8、内部类