关于nonlocal和global的详细解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于nonlocal和global的详细解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2041字,纯文字阅读大概需要3分钟。
内容图文
![关于nonlocal和global的详细解析](/upload/InfoBanner/zyjiaocheng/431/7932374116bc4eae87a75915632b5d45.jpg)
一、Python中global与nonlocal 声明
如下代码
a = 10 def foo(): a = 100
执行foo() 结果 a 还是10
函数中对变量的赋值,变量始终绑定到该函数的局部命名空间,使用global 语句可以改变这种行为。
>>> a 10 >>> def foo(): ... global a ... a = 100 ... >>> a 10 >>> foo() >>> a 100
解析名称时首先检查局部作用域,然后由内而外一层层检查外部嵌套函数定义的作用域,如找不到搜索全局命令空间和内置命名空间。
尽管可以层层向外(上)查找变量,但是! ..python2 只支持最里层作用域(局部变量)和全局命令空间(gloabl),也就是说内部函数不能给定义在外部函数中的局部变量重新赋值,比如下面代码是不起作用的
def countdown(start): n = start def decrement(): n -= 1
python2 中,解决方法可以是是把修改值放到列表或字典中,python3 中,可以使用nonlocal 声明完成修改
def countdown(start): n = start def decrement(): nonlocal n n -= 1
二、Python nonlocal 与 global 关键字解析
nonlocal
首先,要明确 nonlocal 关键字是定义在闭包里面的。请看以下代码:
x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
结果
# inner: 2 # outer: 1 # global: 0
现在,在闭包里面加入nonlocal关键字进行声明:
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
结果
# inner: 2 # outer: 2 # global: 0
看到区别了么?这是一个函数里面再嵌套了一个函数。当使用 nonlocal 时,就声明了该变量不只在嵌套函数inner()里面
才有效, 而是在整个大函数里面都有效。
global
还是一样,看一个例子:
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
结果
# inner: 2 # outer: 1 # global: 2
global 是对整个环境下的变量起作用,而不是对函数类的变量起作用。
总结
【相关推荐】
1. Python免费视频教程
2. Python基础入门教程
3. Python遇见数据采集视频教程
以上就是关于nonlocal和global的详细解析的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的关于nonlocal和global的详细解析全部内容,希望文章能够帮你解决关于nonlocal和global的详细解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。