网站首页 > 资源文章 正文
若在函数作用域中需要修改全局作用域或外层嵌套作用域中的变量,则需要使用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关键字修饰的变量在嵌套作用域中必须已经存在。
猜你喜欢
- 2024-10-17 python 线程安全(python线程安全的字典)
- 2024-10-17 Python实现订单超时自动取消(python自动发货)
- 2024-10-17 Python基础语法知识,3天熟悉你就牛了
- 2024-10-17 「黑马程序员」「成都校区」Python是如何进行内存管理
- 2024-10-17 Python教程:各商品种类的网购替代率如何计算?
- 2024-10-17 python 并发模块介绍(python的并发)
- 2024-10-17 「学习交流」 「成都地区」Python字典底层实现原理
- 2024-10-17 阿里云PYTHON SDK的使用(阿里云服务器跑python)
- 2024-10-17 罗永浩看了都想学!Python的排序算法核心逻辑大揭秘
- 2024-10-17 教你分分钟搞定Linux下yum源配置(linux如何配置yum源)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)