欢迎访问宙启技术站
智能推送

Python函数:闭包是什么?

发布时间:2023-06-06 06:53:04

闭包是一种函数编程的概念,它指的是在一个函数中返回另一个函数,并且这个返回的函数可以访问它被创建时所在的环境变量。在Python中,闭包可以简单理解为一个可以访问自身作用域以外变量的函数。

函数闭包的工作原理主要是基于Python的函数嵌套以及作用域链的机制。即当一个函数作为另一个函数的返回值时,它会形成一个闭包,因为内部函数可以访问外部函数的作用域。当内部函数被调用时,它仍然可以使用外部函数的作用域,因为它已经在闭包中了。

闭包可以在很多场景中被使用,包括:

1. 延迟执行:如果一个函数需要在后续的某个时刻才能运行,但是现在需要创建这个函数,这时就可以使用闭包。

下面是一个例子,函数addn返回一个匿名函数,每次调用这个匿名函数,都会将自己和num相加并返回结果:

def addn(num):
    def add(x):
        return x + num
    return add

add5 = addn(5)
add10 = addn(10)

print(add5(3)) # 8
print(add10(3)) # 13

2. 记录状态:闭包还可以用于记录函数状态。比如在迭代器中,可以使用闭包记录当前的状态。

下面的例子中,函数make_counter返回一个匿名函数,每次调用匿名函数都会将计数器加1并打印新的计数器值。而内部函数count从make_counter中获取了外部函数的计数器变量,这意味着它可以在多次调用之间保留状态。

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

c = make_counter()

c() # 1
c() # 2
c() # 3

3. 封装:闭包可以封装变量和函数,使它们变得私有,从而可以防止全局命名空间的污染。

下面的例子中,函数make_adder返回一个匿名函数,该函数将传入的n与num相加并返回结果。这可以确保num仅在闭包内可见,并且不能被外部代码修改。

def make_adder(num):
    def adder(n):
        return n + num
    return adder

add5 = make_adder(5)
add10 = make_adder(10)

print(add5(3)) # 8
print(add10(3)) # 13

总之,闭包是一种强大的函数编程工具,可以用于多种情景下。它利用函数式编程的思想,使Python函数变得更加灵活和高效。