Python - 闭包

什么叫闭包

外部函数的变量被内部函数引用,就叫做闭包

闭包套路

def outFunc():
        def innerFunc():
        return innerFunc

在此基础做修改

闭包举例

累加

def counter(FIRST=0):
    cnt = [FIRST]

    def add_one():
        cnt[0] += 1
        return cnt[0]

    return add_one


addOne = counter(5)
print(addOne())
print(addOne())

在内部函数中,在等号左侧使用外部函数变量,会被认为是局部变量,如何回避这个问题,如何使外部函数变量在内部函数中参与运算

  1. 使用nonlocal
def counter(seed):
    sum = seed
    def add_one():
        nonlocal sum
        sum += 1
        return sum
    return add_one

addOne = counter(5)
print(addOne())
print(addOne())
  1. 如上使用单元素数组代替(如上累加例子)

一元一次方程

# a * x + b = y
def a_line(a, b):
    return lambda x: a * x + b

line1 = a_line(3, 5)

print(line1(10))

结合lambda使代码更优雅

为什么用闭包

  1. 从代码编写角度,使用闭包,可以使一次性设置的参数,通过外层函数传入,而多次设置的参数,可以通过内部函数进行传入。

注意

  1. func使函数的名称或函数的引用, 而func()是函数的调用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容