Python全局变量与global关键字常见错误解决方案


Posted in Python onOctober 05, 2020

在Python的变量使用中,经常会遇到这样的错误:

local variable 'a' referenced before assignment

它的意思是:局部变量“a”在赋值前就被引用了。

比如运行下面的代码就会出现这样的问题:

a = 3
def Fuc():
print (a)
a = a + 1
Fuc()

​ 但是如果把 a = a + 1 这一句删除又不会出现上述问题了

a = 3
def Fuc():
print (a)
Fuc()

​ 原来,在Python中,a=3 定义了全局变量a,作用域从定义处到代码结束,在 a=3 以下的函数中是可以引用全局变量a的,但如果要修改函数中与全局变量同名的变量,则函数中的该变量就会变成局部变量,在修改之前对该变量的引用自然会出现未分配或未定义的错误了。

​ 如果确定要引用并修改全局变量必须加上global关键字

a = 3
def Fuc():
global a
print (a)
a=a+1
Fuc()

注意要领:哪个函数需要修改全局变量,在函数中声明一下即可。

​ 但是有一个函数特殊,那就是主函数:

a = 3
def Fuc():
global a
print (a) # 1
a = a + 1
if __name__ == "__main__":
print (a) # 2
a = a + 1
Fuc()
print (a) # 3

​输出如下(Python3环境下):

三个print执行的顺序为:2, 1, 3 。可以看到主函数中并没有global声明变量a,仍然可以修改全局变量a。而在普通函数中,需要global声明变量a,才可以修改全局变量a。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
python中调试或排错的五种方法示例
Sep 12 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
在python中修改.properties文件的操作
Apr 08 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
python代码实现图书管理系统
Nov 30 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
用python开发一款操作MySQL的小工具
May 12 Python
如何在C++中调用Python
May 21 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 #Python
Python xmltodict模块安装及代码实例
Oct 05 #Python
Python pathlib模块使用方法及实例解析
Oct 05 #Python
Python fileinput模块如何逐行读取多个文件
Oct 05 #Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 #Python
Python中random模块常用方法的使用教程
Oct 04 #Python
python代数式括号有效性检验示例代码
Oct 04 #Python
You might like
判断PHP数组是否为空的代码
2011/09/08 PHP
php实现递归的三种基本方式
2020/07/04 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python 文件重命名工具代码
2009/07/26 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python正则表达式经典入门教程
2017/05/22 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
HTTP状态码详解
2021/03/18 杂记
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
校园演讲稿汇总
2014/05/21 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
男方婚前保证书
2015/02/28 职场文书
主持稿开场白
2015/06/01 职场文书
转学证明范本
2015/06/19 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python