Python中nonlocal关键字

kkkkk 2018年12月17日 22:48 Python基础

在这篇文章中介绍了“Python的闭包与nonlocal”的用法,因为nonlocal是在Python3.0中新增的关键字,python2.x不提供支持,文中提出在Python2.x解决嵌套函数引用外部变量的方法只有使用global 关键字定义全局变量,另一种可行的解决方案是使用列表或字典代替要操作的关键字。

示例如下:

1.python3.0 使用nonlocal关键字

>>> def outer():
        x = 1
        def inner():
            nonlocal x
            x = 2
            print("inner:", x)
        inner()
        print("outer:", x)
 
 >>> outer()
 inner: 2
 outer: 2

2.python2.x  借助list或dict实现

>>> def outer():
        x = [1]
        def inner():
            x[0] += 1 #修改x[0]保存的值
            print("inner:", x[0])
        inner()
        print("outer:", x[0])
 >>> outer()
 inner: 2
 outer: 2


更多参考资料:

1. http://stackoverflow.com/questions/1261875/python-nonlocal-statement

2.javascript中作用域链定义与python作用域的异同

3.官方文档:

“The nonlocal statement causes the listed identifiers to refer to previously bound variables in the nearest enclosing scope. This is important because the default behavior for binding is to search the local namespace first. The statement allows encapsulated code to rebind variables outside of the local scope besides the global (module) scope.

Names listed in a nonlocal statement, unlike to those listed in a global statement, must refer to pre-existing bindings in an enclosing scope (the scope in which a new binding should be created cannot be determined unambiguously).

Names listed in a nonlocal statement must not collide with pre-existing bindings in the local scope.“


文章评论(0)
  • avatar kkkkkk 2018年12月21日 11:31
    哈哈
    kkkkk
    2018年12月21日 11:16
    本文从投票者的角度切入立论,广泛联系社会现实中的同类现象,有效拓展了题材范围,深入阐述主题内涵,彰显深刻,语言流畅有气势,颇为雄辩。立意剑走偏锋,较为危险。
    回复
  • avatar kkkkkk 2018年12月21日 11:31
    优秀啊
    kkkkklxinde
    2018年12月21日 11:17
    简洁流畅,意义深长。言近旨远,不同凡味 明察秋毫,描述生动。 内容曲折,耐人寻味。
    回复
  • avatar kkkkklxinde 2018年12月21日 11:17
    简洁流畅,意义深长。言近旨远,不同凡味 明察秋毫,描述生动。 内容曲折,耐人寻味。
    回复
  • avatar kkkkk 2018年12月21日 11:16
    本文从投票者的角度切入立论,广泛联系社会现实中的同类现象,有效拓展了题材范围,深入阐述主题内涵,彰显深刻,语言流畅有气势,颇为雄辩。立意剑走偏锋,较为危险。
    回复