教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

Python中关键字global与nonlocal的区别

更新时间:2022年10月21日15时05分 来源:传智教育 浏览次数:

  若在函数作用域中需要修改全局作用域或外层嵌套作用域中的变量,则需要使用global和nonlocal关键字。接下来,分别对关键字global和nonlocal的作用进行介绍。

  1.global关键字

  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进行了修改。

  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进行修改。而是重新定义了一个同名的变量count。若要修改外层函数func中的变量count,则需要在变量前使用nonlocal关键字,改后的示例代码如下:

def func():
    count = 1
    def func_in():
        nonlocal count
        count = 12
    func_in()
    print(count)
func()
12

  由执行结果可知,内层函数成功修改了变量的值。

注意:

  使用global关键字修饰的变量之前可以不存在,而使用nonlocal关键字修饰的变量在嵌套作用域中必须已经存在。

0 分享到:
和我们在线交谈!