闭包函数

def wrapperfun(str_name):
    def recoder(age):
        print(str_name, age)
    return recoder


fun = wrapperfun("Anna")
fun(37)
fun = wrapperfun("Gary")
fun(32)
print(fun.__closure__)

Anna 37
Gary 32
(<cell at 0x101b80e80: str object at 0x101a9b9b0>,)

闭合函数wrapperfun中实现了一个嵌入函数recoder,并将嵌入函数recoder返回。嵌入函数recoder中调用了外部变量str_name,这个str_name是由wrapperfun被调用时传入的参数。当wrapperfun被调用后,返回自身嵌入recorder的同时,又将自身的参数str_name与内嵌recoder绑定起来,赋值给fun。fun就等同一个str_name被初始化后的decoder函数。此时的fun可以理解为一个decoder的闭合函数,自由变量str_name存在与该闭合函数内

闭合函数比普通函数多一个属性closure,该属性会记录着自由变量的参数对象地址。当闭合函数被调用时,系统就会根据该地址找到自由变量,完成整体的函数调用

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

推荐阅读更多精彩内容