美文网首页
python2.7闭包的局限

python2.7闭包的局限

作者: bigtom | 来源:发表于2016-09-19 20:19 被阅读50次
def foo():
    a = 1
    def bar():
        a += 1
        print a
        if a == 10:
            return
        bar()
    bar()
foo()

结果运行出错

Traceback (most recent call last):
  File "temp.py", line 10, in <module>
    foo()
  File "temp.py", line 9, in foo
    bar()
  File "temp.py", line 4, in bar
    a += 1
UnboundLocalError: local variable 'a' referenced before assignment

修改

def foo():
    a = [1]
    def bar():
        print a
        a[0] += 1
        if a[0] == 10:
            return
        bar()
    bar()
foo()

运行成功

解释

原因在于Python的数字,字符串是"不可变类型".列表是"可变类型",而闭包中引用并修改的外部变量需要是可以修改的自由变量。

相关文章

  • python2.7闭包的局限

    结果运行出错 修改 运行成功 解释 原因在于Python的数字,字符串是"不可变类型".列表是"可变类型",而闭包...

  • Javascript-基本知识(六)

    1. 闭包 1 闭包的作用: 2 setTimeOut和闭包: js本身是单线程。 单线程的局限性:执行多个任务时...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • centos 常用工具安装

    概述 centos常用工具包。 常用基础包 python2.7 pip升级包 python2.7想升级pip的话,...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • javascript闭包详解

    跟我念 bi 闭 bao包 ,闭包的闭,闭包的包。。 闭包的简介 在计算机科学中,闭包(英语:Closure),又...

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • Gradle开发-Groovy闭包

    # 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础...

网友评论

      本文标题:python2.7闭包的局限

      本文链接:https://www.haomeiwen.com/subject/kiunettx.html