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 相关文章推荐
Python 存储字符串时节省空间的方法
Apr 23 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python pillow模块使用方法详解
Aug 30 Python
对python中assert、isinstance的用法详解
Nov 27 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python实现简单学生信息管理系统
Apr 09 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
如何基于Python按行合并两个txt
Nov 03 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 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数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
jquery实现数字输入框
2017/02/22 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
原生实现一个react-redux的代码示例
2018/06/08 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
继承权公证书
2014/04/09 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
大班上学期个人总结
2015/02/13 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
决心书格式及范文
2019/06/24 职场文书
创业计划书之水果店
2019/07/18 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang