美文网首页
Python闭包的作用域理解

Python闭包的作用域理解

作者: Syfun | 来源:发表于2016-10-25 19:32 被阅读121次

什么是闭包

在维基中,闭包的解释是这样的:

在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

我们来看一个简单的实例:

def outer(arg):
    def inner():
        print arg * arg
    return inner

>>> f = outer(2)
>>> f()
4

内部函数inner调用外部函数outer的局部变量arg,它保存了outer的arg值。这就是闭包。

从作用域的角度理解

把上面的例子改一下,在函数内部输出局部命名空间:

def outer(arg):
    print locals()
    def inner():
        x = arg * arg
        print locals()
        print x
    return inner

>>> f = outer(2)
{'arg': 2}
>>> f()
{'x': 4, 'arg': 2}
4
>>>

在outer中,局部命名空间只有一个键arg,而在inner内部也有arg。上面说的inner保存了outer的arg值,我们就可以理解为inner的局部命名空间保存了arg。

这么一理解,就会发现闭包其实就这么简单。

另外再瞎扯一句,python中的装饰器其实就是闭包。

相关文章

  • Python装饰器与闭包!

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。 变量作用域规则 首先,在函数...

  • 2018-07-11

    深入理解闭包: 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非...

  • 闭包、定时器

    一、什么是闭包? 有什么作用 1.变量的作用域  要理解闭包,首先必须理解JavaScript的变量作用域。变量的...

  • JavaScript中的闭包

    1.什么是闭包 要理解什么是闭包,就得先理解变量的作用域。在JavaScript中,有两种作用域,全局作用域和函数...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • Python中的闭包是什么?

    目录 作用域(scope) 闭包的定义 闭包的作用 总结 2018.4.15更新了对于函数作用域的理解内容 1.作...

  • Python学习中闭包与变量作用域

    1. 作用域 Python的作用域可以分为四种: L (Local) 局部作用域 E (Enclosing) 闭包...

  • 5分钟入门闭包

    理解闭包前先要理解两个概念:作用域和作用域链。一、作用域分为: 全局作用域 函数作用域 var a = 100 f...

  • JavaScript 函数闭包(colsure)

    理解闭包,你首先必须理解JS的变量作用域,JavaScript作用域和作用域链。 ES6之前,变量的作用域分为全局...

  • js闭包

    一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域。 作用域无非就是两种:全局作用域和...

网友评论

      本文标题:Python闭包的作用域理解

      本文链接:https://www.haomeiwen.com/subject/tiaruttx.html