码迷,mamicode.com
首页 > 其他好文 > 详细

对闭包的误区

时间:2019-05-31 10:29:08      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:www   closed   click   fan   splay   pre   span   tail   误区   

技术图片
def func():
    a=1
    def bibao():
        a+=1
        return a
    return bibao

c=func()
c()
错误代码示例

这是因为在执行代码 c = foo()时,python会导入全部的闭包函数体bar()来分析其的局部变量,python规则指定所有在赋值语句左面的变量都是局部变量,则在闭包bar()中,变量a在赋值符号"="的左面,被python认为是bar()中的局部变量。再接下来执行print c()时,程序运行至a = a + 1时,因为先前已经把a归为bar()中的局部变量,所以python会在bar()中去找在赋值语句右面的a的值,结果找不到,就会报错。解决的方法很简单

技术图片
def foo():  
    a = [1]  
    def bar():  
        a[0] = a[0] + 1  
        return a[0]  
    return bar
View Code

参考:http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html

参考:http://blog.csdn.net/marty_fu/article/details/7679297

对闭包的误区

标签:www   closed   click   fan   splay   pre   span   tail   误区   

原文地址:https://www.cnblogs.com/Bin-y/p/10953716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!