Python中的闭包是什么?如何使用闭包?代码举例讲解

闭包(Closure)是Python中一个很强大的特性。一个闭包是一个函数,它记住了创建它时的环境。简单说,闭包是一个函数和它的环境的引用捆绑在一起。

闭包的优点是:

  1. 可以避免使用全局变量,更清晰地表达变量的作用域。
  2. 闭包可以延长局部变量的生命周期。
  3. 可以封装一些可执行的环境。

在Python中,闭包可以这样使用:

  1. 在一个函数内部定义另一个函数,并且内部函数引用了外部函数的变量。
  2. 外部函数返回内部函数,这就构成了一个闭包。
  3. 每次调用外部函数都会返回一个新的闭包(内部函数的引用)。
# 例1:计算移动平均值

def make_averager():
    count = 0
    total = 0

    def averager(new_value):
        count += 1
        total += new_value
        return total / count

    return averager

avg = make_averager() 
avg(10)   # 10.0
avg(20)   # 15.0
avg(30)   # 20.0

# 例2:记录函数调用次数

def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter

c1 = make_counter()
c2 = make_counter()

c1()   # 1
c1()   # 2
c2()   # 1
c2()   # 2  

在上例中:

  • make_averager()函数返回averager()函数的引用,构成闭包。averager()引用了外层函数的变量。
  • make_counter()函数返回counter()函数的引用,构成闭包。counter()使用nonlocal关键字修改外层函数的变量。
  • 每次make_averager()和make_counter()的调用都返回一个新的闭包。