python_闭包问题

  • 闭包的概念
  • 闭包的相关例子
  • 相关问题的解决

1 闭包问题的概念

  简单来说, 函数定义了函数外引用的变量,并且该函数可以在定义外执行。

2闭包的相关例子

先来看一个问题吧

def my_fun1():
    x = 5
    def my_fun2():
        x *= x
        return x
    return my_fun2()
my_fun1()

结果是:UnboundLocalError: local variable 'x' referenced before assignment

python认为第一个x=5的定义是外部函数,所以进入my_fun2()的时候就报错了。在python3之前是没有解决方案的,只能间接地通过容器类型来存放,因为容器类型不是存放在栈里面,所以会被屏蔽掉。

改进方法

def my_fun1():
    x = 5
    def my_fun2():
        nonlocal x
        x *= x
        return x
    return my_fun2()

my_fun1()

加入了 nonlocal 解决了问题

你可能感兴趣的:(python)