您的位置:首页 > 编程语言 > Python开发

python3 nonlocal vs global

2015-06-28 14:07 393 查看
考虑这样一个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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: