这一章节我们来讨论一些nonlocal
1.nonlocal简介
nonlocal与global相似,但是它只是作用于嵌套作用域,而且只是作用在函数里面
>>> def test():
x=1
print("test:"+str(x))
def test2():
nonlocal x
x=3
print("test2:"+str(x))
class a:
nonlocal x
x=5
print("a:"+str(x))
def a1():
nonlocal x
x=7
print("a.a1:"+str(x))
test2()
a.a1()
print("test:"+str(x))
>>> test()
test:1
a:5
test2:3
a.a1:7
test:7
从上面的代码可以得出前面的结论,大家也许会注意到,test里面有个class,而且它里面的nonlocal x起作用了,是不是相违背?
不是,因为它的最外层是def
我们给一个更加直接的代码:
>>> def test():
x=1
print("test:"+str(x))
#def test2():
# nonlocal x
# x=3
# print("test2:"+str(x))
class a:
nonlocal x
x=5
print("a:"+str(x))
def a1():
nonlocal x
x=7
print("a.a1:"+str(x))
#test2()
a()
print("test:"+str(x))
>>> test()
test:1
a:5
test:5
>>>
我们注释了一部分代码,而且不知道a里面的a1,这个时候我们看见,nonlocal也是起作用的
但是有一点需要注意的地方:(也是global与nonlocal的区别)
global可以从嵌套的作用域开始执行,但是nonlocal所声明的变量必须已经存在,不然会报错
>>> def test():
global x
>>> def test():
nonlocal x
SyntaxError: no binding for nonlocal 'x' found
>>>
2.应用
nonlocal主要用于修改外层函数的变量
看下面代码:
>>> def test():
x=1
print("test:"+str(x))
def test2():
#nonlocal x
x=3
print("test2:"+str(x))
test2()
return x
>>> test()
test:1
test2:3
1
>>>
如果没使用nonlocal,x是不会改变的
>>> def test():
x=1
print("test:"+str(x))
def test2():
nonlocal x
x=3
print("test2:"+str(x))
test2()
return x
>>> test()
test:1
test2:3
3
总结:这一章节主要讲述了nonlocal是什么,还讲述了nonlocal的简单应用
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。