首页 > 编程语言 > 详细

python3 nonlocal vs global

时间:2015-06-28 15:24:03      阅读:372      评论:0      收藏:0      [点我收藏+]

考虑这样一个python程序:

x = 12

def func():

      x = 1

func()

print(x)

 

输出为:x = 12

因为函数内部定义的x被认为只属于局部作用域,为了表明我么引用的是全局的x而不是新定义一个局部的x,

可以使用global关键字:

x = 12

def func();

    global x

    x = 1

func()

print(x)

可以发现输出已经变成了1,也就是在函数内部成功修改了一个全局变量

还有一种情形,就是嵌套的局部作用域的问题:

def g():

    x = 12

    func():

         x = 1

    func()

    print(x)

g()

这样输出的结果为12,因为func函数调用时定义的X也被认为只属于局部作用域了,但是此时函数g()里定义的x并非全局变量,用前述的global关键字肯定是不行的,

所以又有了nonlocal,这样写:

def g():

     x = 12

     func():

         nonlocal x

         x = 1

     func()

     print(x)

g()

这时,输出的结果就是我们预期的1了,nonlocal就是声明要引用一个外部作用域(全局作用域除外)中定义的变量。

需要指出的是,上述关键字之所以需要,是因为我们试图去修改全局变量或者处于外部作用域的变量,如果在局部作用域内部重定义全局变量或外部作用域变量,仅仅只读访问(比如print出来)是完全没有问题的,参看下面这个例子:

a = 12
def g():
    b = 11
    def func():
        print(a)
        print(b)
    func()
    return
if __name__ == ‘__main__‘:
    g()

python3 nonlocal vs global

原文:http://www.cnblogs.com/hustxujinkang/p/4605480.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!