zoukankan      html  css  js  c++  java
  • 对闭包的误区

    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

  • 相关阅读:
    嵌入式软件设计第8次实验报告
    嵌入式软件设计第7次实验报告
    140201129-贾杰峰
    java.第二次作业
    java.第一次作业
    故宫博物院参观
    中国国家博物馆参观
    北京鼓楼
    6.1下午数学
    6.1下午
  • 原文地址:https://www.cnblogs.com/Bin-y/p/10953716.html
Copyright © 2011-2022 走看看