python之闭包

简单介绍:闭包是指在一个函数内部定义的函数,并且这个内部函数引用了外部函数中的变量。闭包允许这个内部函数捕获和访问外部函数的局部变量,即使外部函数已经执行完毕。

def outer_func(x):
    def inner_func(y):
        return x + y
    return inner_func

closure = outer_func(10)
result = closure(5)
print(result)

这个例子中外部函数接受一个参数x,然后定义一个内部函数,这个内部函数引用了外部函数中的x。最后outer_func返回了inner_func。当我们调用outer_func(10)时候,返回了一个闭包closure,这个闭包可以在后续的调用中使用。所以当调用closure(5)时,实际上已经使用了外部函数中的x,所以输出15。

主要作用:

封装:闭包允许将函数与其相关的状态(局部变量)捆绑在一起,形成一个封闭的单元。这种封装有助于隐藏实现的细节,提高代码的模块化与可实现性。

保持状态:闭包可以用于保持函数执行时的状态。内部函数可以访问并修改外部函数的局部变量,因此可以在多次调用之间保留状态。这对于某些记录状态的任务(计数器、累加器等)很有用。

实现装饰器:装饰器是一种使用闭包的常见模式。通过使用闭包可以轻松创建装饰器,在不修改原始代码的情况下添加额外的功能。

函数工厂:闭包允许创建函数工厂,即生成和返回其他函数的函数。这对于根据不同的配置生成不同行为的函数非常有用。

回调函数:闭包可以作为回调函数,传递给其他函数,以在稍后的时间点执行。

示例二:

def outer_func(x):
    value = x
    def inner_func(y):
        nonlocal value
        value += y
        return value
    return inner_func


counter = outer_func(0)
print(counter(1))    #1
print(counter(3))    #4
print(counter(5))    #9

通过调用outer_fun(00 创建了一个闭包counter,它保持着一个状态(value的值),并且可以在多次调用中保持这个状态。每次调用counter(1)、counter(3)、counter(5) 都会在原有的基础上递增,并返回累积的结果。

你可能感兴趣的:(python,开发语言)