Python中local,nonlocal,global的区别


TL;DR

local指的是一个函数里的值,而nonlocal的话,针对的是在一个函数里,如果嵌套了内层的函数的话,通过制定nonlocal,那么就可以把这个值当做是整个函数里的“global” 变量。而global变量的作用范围则是在函数或class之外的。

解释

x = 'global'

def outer():
  x = 'nonlocal'
  def inner():
    nonlocal x
    x = 'local'
    print('inner:', x)
  inner()
  print('outer:', x)
outer()
print('global:', x)

# inner: local
# outer: local
# global: global

这里我们创建了3个x,分别代表global, nonlocal, lcoal。global和local比较好理解,主要是nonlocal。我们在inner()里使用nonlocal x将x变为了nonlocal变量,所以原来x的值由outer()里设定的'nonlocal'变为了inner()里设定的'local'

虽然有nonlocal可以升级一个变量的作用域,但是我个人并没有找到什么合适的应用场景。因为这种用法还不如新建一个class,然后把需要在不同method之间公用的变量,用__init__()函数保存来的方便。

欢迎订阅我的博客:RSS feed
知乎: 赤乐君
Blog: BrambleXu
GitHub: BrambleXu
Medium: BrambleXu

参考资料


文章作者: BrambleXu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 BrambleXu !
评论
  目录