Python基础之闭包函数

闭包的概念

在 Python 中很多地方都会使用到闭包,那么究竟什么叫做闭包呢? 在维基百科上是这么解释的。

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。——
维基百科

简而言之, 闭包的特点就是内部函数引用了外部函数中的变量。 在Python中,支持将函数当做对象使用,也就是可以将一个函数当做普通变量一样用作另一个函数的参数和返回值。拥有此类特性的语言,一般都支持闭包。

闭包中被内部函数引用的变量,不会因为外部函数结束而被释放掉,而是一直存在内存中,知道内部函数被调用结束。

闭包实例

def func():
    name = 'python'
    def inner():
        print(name)
    return inner

f = func()  # f = func() = inner 
f()  # f() = inner 
# 输出结果:python

因为作用域的原因,在函数外部就无法拿到函数中的变量和内部函数。通常我们需要使用函数中的变量时,才去将变量返回的办法。同理,在使用内部函数时,我们也可以将函数名作为返回值返回。 这是闭包最常用的方式。

如何判断是否是闭包函数

函数名.__closure__ 在函数是闭包函数时,返回一个cell元素;不是闭包时,返回None。
输出cell:

def func():
    name = 'python'
    def inner():
        print(name)
    print(inner.__closure__)  # (<cell at 0x0000027C14EB85E8: str object at 0x0000027C14F54960>,)
    return inner

f = func()
f()

输出None:

name = 'python'
def func():
    def inner():
        print(name)
    print(inner.__closure__)  # None
    return inner

f = func()
f()
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页