Python 爬阶梯 | 如何理解 Python 中的闭包

我们之前在说函数中的变量作用域的时候,有提到 nonlocal 这个玩意,也就是说当我们在使用嵌套函数的时候,涉及到的一些变量访问问题,举个例子:

在这里我们定义了一个嵌套函数,我们在内部方法 inner_fun 中直接去访问了外部方法的变量 x ,执行结果可以看到,是可以访问的。但是如果我们要去修改这个外部的变量,会怎么样呢?

是的,会报错:

本文隐藏内容 登陆 后才可以浏览
的时候,用闭包是一种更好的选择。

8 Replies to “Python 爬阶梯 | 如何理解 Python 中的闭包”

  1. fanhuaxiang说道:

    当调用 outer_fun(5) 时,返回的并不是求和结果,而是内部 inner_fun() 函数的引用,调用函数 outer() 时,才是真正计算求和的结果。

  2. outer = outer_fun(5)
    outer(8) #为什么这里的8 就会指向传递给内部函数的y,而不是给 外部的 x

    1. 小帅b说道:

      当执行到 outer_fun(5) 的时候,这时候会返回内部函数的引用,而我们一开始传入的 5 已经在里面了,这时候我们在调用 outer(8) 的时候,它会直接去运行内部的方法 inner_fun(y) ,所以你这时候传入的参数就是给 y 的,然后执行 x+y ,从而得到结果 13 。

  3. outer(2) #运行此处报错,一样的代码,网上查去掉(),但这样就无法传参数了,请问应该怎么解决?

    TypeError: ‘NoneType’ object is not callable

    1. 解决了,return inner_fun() #自己在写的时候,此处多了(),删掉即解决

  4. liunian009说道:

    有点懵,不是很理解,但是也不知道要怎么问,希望后面回来看的时候可以看懂吧orz

回复 qyxuan 取消回复