BAE*_*RAM 21 python variables programming-languages global-variables python-nonlocal
我正在学习编程语言的概念。
我在 python 语法中发现了术语“nonlocal”。
python中的nonlocal是什么意思?
小智 26
非局部变量存在于嵌套块中。使用关键字 nonlocal 并获取最近的封闭块中的值。例如:
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
Run Code Online (Sandbox Code Playgroud)
由于 x 的值已被内部函数更改,因此两次输出都将是“非局部”。
You*_* Hu 17
“非本地”意味着变量“既不是本地的也不是全局的”,即该变量来自封闭的命名空间(通常来自嵌套函数的外部函数)。
非局部和全局之间的一个重要区别是,非局部变量必须已经绑定在封闭的命名空间中(否则将引发语法错误),而局部作用域中的全局声明不需要预先绑定该变量(它将创建如果变量未预先绑定,则全局命名空间中的新绑定)。
小智 13
nonlocal fooininner()可以访问非局部变量foo = 10in middle(),但不能访问非局部变量foo = 5inouter()或全局变量foo = 0outside outer(),如下所示:
foo = 0 # <- \xe2\x9c\x96\ndef outer():\n foo = 5 # <- \xe2\x9c\x96\n def middle():\n foo = 10 # <- \xe3\x80\x87\n def inner():\n nonlocal foo # Here\n foo += 1\n print(foo) # 11\n inner()\n middle()\nouter()\nRun Code Online (Sandbox Code Playgroud)\nglobal fooininner()可以访问outside的全局变量foo = 0outer(),但不能访问and中的非局部变量foo = 5,如下所示:outer()middle()
foo = 0 # <- \xe3\x80\x87\ndef outer():\n foo = 5 # <- \xe2\x9c\x96\n def middle():\n foo = 10 # <- \xe2\x9c\x96\n def inner():\n global foo # Here\n foo += 1\n print(foo) # 1\n inner()\n middle()\nouter()\nRun Code Online (Sandbox Code Playgroud)\n