闭包/工厂函数

闭包:python函数的内部的变量离开这个函数就失去了作用域而不复存在
但是嵌套函数可以!

def fn1():
    x = 1
    def fn2():
        def fn3():
            print(x)
        return fn3
    return fn2
a = fn1()()()

解析: x是属于fn1函数的,但是在 fn1()调用结束后 我们又加了两个括号调用到了fn3,你看他还是能输出x的值
但嵌套函数只是引用它!不能修改它,要在嵌套函数里修改x的值需要申明nonlocal x

def fn1():
    x = 1

    def fn2():
        def fn3():
            noncal x
            x+=1
            print(x)

        return fn3

    return fn2


a = fn1()()()

工厂函数:
函数return的时候返回一个函数名

参考:https://www.zhihu.com/question/20670869 石溪的答案

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 重要概念 定义匿名函数具名函数箭头函数 词法作用域(也叫静态作用域) var global1 = 1 functi...
    MrTon_1965阅读 319评论 0 0
  • 函数是Python里组织代码的最小单元,Python函数包含以下几个部分: 定义函数 调用函数 参数 函数的返回值...
    职场亮哥阅读 466评论 0 0
  • 1.函数柯里化https://www.jianshu.com/p/2975c25e4d71[https://www...
    小螃蟹_5f4c阅读 328评论 0 1
  • 阅读本文可以了解如下内容: 似然 似然估计 对数似然 负对数似然 1. 似然 在开始之前需要区分一个知识:似然(l...
    一位学有余力的同学阅读 17,992评论 2 11
  • 一、作用域 A、定义 代码在运行时,各个变量、函数和对象的可访问性。换句话说,作用域决定了你的代码里的变量和其他资...
    5吖阅读 660评论 0 1