博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python随笔系列--global和nonlocal关键字
阅读量:7133 次
发布时间:2019-06-28

本文共 1434 字,大约阅读时间需要 4 分钟。

global

函数外部定义的变量(即global范围),在函数内部可以引用,但是不能修改。

如果函数中要使用一个外层(这里是global)的变量,若函数内部使用global标记该变量,那么在函数内尽可以“读取”该变量;若要在函数内修改该global变量,则需要用global语句,函数对该变量的修改也会体现到global作用域。

>>> oo=123>>> def kai():    print(oo)    oo = pp+1    print(oo)>>> kai()Traceback (most recent call last):  File "
", line 1, in
kai() File "
", line 2, in kai print(oo)UnboundLocalError: local variable 'oo' referenced before assignment>>> def kai(): print(oo) #oo = pp+1 print(oo)>>> kai()123123>>> oo+=1>>> oo124>>> kai()124124>>>

但是如下定义函数在函数内部就可以修改全局变量

>>> def kai():    global oo    print(oo)    oo = oo+1    print(oo)

nonlocal

nonlocal指定在当前作用域使用上层作用域中(但排除global作用域)的变量名

nonlocal只能在函数内的函数中使用,如果直接在全局作用域下定义的函数中使用该语句,会报错

>>> def yun():    nonlocal y    #根本就无法继续书写语句SyntaxError: no binding for nonlocal 'y' found

看一个正确使用nonlocal的例子

>>> n=1>>> def outer():    n='n'    print(n)    def inner():        nonlocal n        n='nn'        print(n)    inn()    print(n)>>> outer()n   #先打印外层定义的nnn  #内层函数修改了外层函数中的变量nnn  #然后外层函数再打印n就变成了内部函数修改后的值>>>

再看一个例子

>>> n=1>>> def outer():    #print(n)    n='n'    print(n)    def inner():        global n    #和上例比这里改用global        #nonlocal n        n='nn'        print(n)    inner()    print(n)>>> outer()n  nnn      #可以看到外层函数的n并没有修改>>> n  #而全局变量n被inner函数修改'nn'

这里的规则仅是针对不可变元素,如字符串数字等,对于列表或队列打等可变元素无效。深层原因是向可变对象中增删改元素并不是对该对象本身的修改

转载于:https://blog.51cto.com/kaifly/2358266

你可能感兴趣的文章
Why游戏作品合集
查看>>
【背景建模】VIBE
查看>>
函数项级数的一致收敛
查看>>
Axure RP 快速原型设计工具
查看>>
The Definitive C++ Book Guide and List--reference
查看>>
去除List集合中的重复对象,Map遍历代码
查看>>
ASP.NET MVC 5 - 视图
查看>>
Action类为何要继承ActionSupport
查看>>
Rhythmk 一步一步学 JAVA (17):Servlet 文件上传
查看>>
【C#】C#委托学习
查看>>
Windows 2012 R2中安装SharePoint 2013 sp1参考
查看>>
WP7.1 应用程序发布到Marketplace
查看>>
NSIS:判断程序是否运行并进行卸载
查看>>
使用SQL Server存储ASP.NET Session变量
查看>>
C#多线程与异步的区别
查看>>
boost::archive::text_oarchive
查看>>
matplotlib 显示中文
查看>>
WPF单线程定时器 简单实例
查看>>
javascript中的数据结构
查看>>
jsp get方式请求参数中包含中文乱码问题解决
查看>>