Python教程:global、nonlocal关键字区别与用法

一:global:在函数内部引用/声明全局变量

在自定义函数时,有时候需要引用函数外的一些全局变量,如果不需要修改全局变量的内容,则可以直接引用,像下面这样:

c = 999

def func():
    print(c)
if __name__ == '__main__':
    func()

函数的作用只是输出变量 c 的值,并未对 c 进行修改,所以不会报错。但如果想要在函数内部对全局变量进行一个修改,则需要使用global关键字,

c = 999

def func():
    for i in range(10):
        c += 1


if __name__ == '__main__':
    func()
    print(c)

上面的代码中,在func函数中尝试修改 c 这个变量,但会出现如下错误:

UnboundLocalError: local variable ‘c’ referenced before assignment

意思是:赋值之前引用了局部变量。global关键字可以解决这个问题,如下:

c = 999

def func():
    global c        # 在修改前使用global关键字
    for i in range(10):
        c += 1
if __name__ == '__main__':
    func()
    print(c)

另外,global还可以帮助我们在函数内部声明一个全局变量,如下:

def func():
    global c        # 在函数内部声明一个全局变量
    c = 100
if __name__ == '__main__':
    func()
    print(c)

二:nonlocal关键字

nonlocal的作用于global类似,只不过global是在函数内部引用/修改全局变量,而nonloca是在内层函数中引用/修改外层函数定义的局部变量(非全局变量)。这种现象也成为闭包。

def func():
    c = 100
    def foo():
        for i in range(10):     # 对外层函数的c变量进行修改
            c += 1
    foo()
    print(c)

if __name__ == '__main__':
    func()

报错如下:

UnboundLocalError: local variable 'c' referenced before assignment

与上面的错误相同,但这时候不能再使用global关键字了,而要使用nonlocal关键字,(如果使用了global,则相当于又声明的一个新的变量)

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func():
    c = 100
    def foo():
        nonlocal c
        for i in range(10):     # 对外层函数的c变量进行修改
            c += 1
    foo()
    print(c)

if __name__ == '__main__':
    func()

这样就不会报错了,输出结果是110.

总的来说:global关键字用来在函数或其它局部作用域中使用全局变量。但是如果不使用全局变量也可以不适用global关键字声明,nonlocal关键字用来在函数或其它作用域中使用外层(非全局)变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值