更新时间:2022-09-28 来源:黑马程序员 浏览量:
若在函数作用域中需要修改全局作用域或外层嵌套作用域中的变量,则需要使用global和nonlocal关键字。接下来,分别对关键字global和nonlocal的作用进行介绍。
global关键字用于在函数作用域中修改全局变量。假设现在有一个test函数,其外部定义了一个全局变量a,其内部对全局变量a进行重新赋值,示例代码如下:
a = 100 def test(): a += 100 print(a) test() Traceback (most recent call last): File "<stdin>", line1, in <module> File "<stdin>", line2, in test UnboundLocalError:local variable 'a' referenced before assignment
上述程序报错,提示“在赋值前引用了局部变量a”。但是,前面我们明明是可以在函数中访问全局变量的呀?而这里为什么会出错呢?
这就是Python与其他语言的不同之处了。在Python中,如果在函数内部对全局变量a进行修改,Python会把变量a当作是局部变量,而在进行“a+=100”之前,我们是没有声明局部变量a的,因此,程序会出现上述错误提示。
要想在函数内修改全局变量,我们可以在函数内使用global关键字进行声明,下面,我们对程序进行修改,示例代码如下:
a = 100 def test(): global a a += 100 print(a) test() 200
这下,程序不但没有报错,而且成功对全局变量a进行了修改。
使用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进行修改。而是重新定义了一个同名的变量count。若要修改外层函数func中的变量count,则需要在变量前使用nonlocal关键字,改后的示例代码如下:
def func(): count = 1 def func_in(): nonlocal count count = 12 func_in() print(count) func() 12
由执行结果可知,内层函数成功修改了变量的值。
注意:
使用global关键字修饰的变量之前可以不存在,而使用nonlocal关键字修饰的变量在嵌套作用域中必须已经存在。