python nonlocal的用法_python中的global和nonlocal关键字怎么使用

global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

#!/usr/bin/python3

num = 1

def fun1():

global num  # 需要使用 global 关键字声明

print(num)

num = 123

print(num)

fun1()

print(num)

以上实例输出结果:

1

123

123

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

#!/usr/bin/python3

def outer():

num = 10

def inner():

nonlocal num   # nonlocal关键字声明

num = 100

print(num)

inner()

print(num)

outer()

以上实例输出结果:

100

100

另外有一种特殊情况,假设下面这段代码被运行:

#!/usr/bin/python3

a = 10

def test():

a = a + 1

print(a)

test()

以上程序执行,报错信息如下:

Traceback (most recent call last):

File "test.py", line 7, in

test()

File "test.py", line 5, in test

a = a + 1

UnboundLocalError: local variable "a" referenced before assignment

错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。

修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为:

#!/usr/bin/python3

a = 10

def test(a):

a = a + 1

print(a)

test(a)

执行输出结果为:

11

b0c362a14e62cc3f1ef84d0ee17e9773.png

本博客源码Github地址:

请随手给个star,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值