[Py006] global vs nonlocal
2018-10-18 本文已影响7人
安哥生个信
可参考https://www.cnblogs.com/brad1994/p/6533267.html
global
只能作用于全局环境,针对的是最外层的 x=0
外层函数outer
下的x=1
无法被 global
覆盖,所以最后print("outer:",x)
返回的是1
In[2]: x = 0
In[3]: def outer():
...: x = 1
...: def inner():
...: global x
...: x = 2
...: print("inner:",x)
...: inner()
...: print("outer:",x)
...:
In[4]: outer()
inner: 2
outer: 1
In[5]: print("global:",x)
global: 2
nonlocal
只能在闭包里面使用
当使用 nonlocal
时候,就声明了x
不知在嵌套函数inner
里有效,而是在整个大函数outer
里面都有效
In[6]: def outer():
...: x = 1
...: def inner():
...: nonlocal x
...: x = 2
...: print("inner:",x)
...: inner()
...: print("outer:",x)
...:
In[7]: x=0
In[8]: outer()
inner: 2
outer: 2
In[9]: print("global:",x)
global: 0