如果需要修改全局作用域或函数作用域内的外部嵌套作用域中的变量,则必须使用global 和nonlocal 关键字。接下来我们分别介绍一下关键字global和nonlocal的作用。
1.global关键字
global 关键字用于修改函数作用域内的全局变量。假设我们有一个测试函数,它在外部定义了一个全局变量a,并在内部重新分配了全局变量a。示例代码如下。
a=100def test(): a +=100 print(a)test()Traceback (last call last): 文件'stdin', line1, 在模块中文件'stdin', line2, testUnboundLocalError: 局部变量'a' 是先前引用的上面的程序报告了一个错误,显示消息“局部变量a 在赋值之前被引用”。但以前我能够访问函数内部的全局变量,那么为什么我在这里遇到问题呢?
这就是Python 与其他语言的不同之处。在Python中,如果您在函数内更改全局变量a,Python会将变量a视为局部变量,但您在执行“a+=100”之前尚未声明局部变量a。上面的错误消息。
要更改函数内的全局变量,请使用global 关键字在函数内声明它们。接下来修改示例代码。
a=100def test(): global a a +=100 print(a)test()200 现在,程序不但没有报错,还成功修改了全局变量a。
2.nonlocal关键字
使用nonlocal 关键字修改函数作用域内嵌套作用域中的变量。让我们看下面的一个例子。
def func(): count=1 def func_in(): count=12 func_in() print(count)func()1 上面的代码定义了一个嵌套函数。这里,func是外部函数,func_in是内部函数。使用func 函数定义变量count,使用func_in 函数重新分配变量count,并使用func 函数输出count 变量的值。执行结果显示,内部函数func_in并没有改变外部函数func的变量计数。相反,具有相同名称的变量count 被重新定义。如果要修改外部函数func的变量个数,必须在变量前使用nonlocal关键字。这是修改后的代码示例:
def func(): count=1 def func_in(): nonlocal count count=12 func_in() print(count)func()12 执行结果显示内部函数成功改变了变量的值。
消息:
使用global 关键字修改的变量不必先前存在,而使用nonlocal 关键字修改的变量必须已经存在于嵌套范围中。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。