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 25 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
浅析python内置模块collections
Nov 15 Python
python设置环境变量的作用整理
Feb 17 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
python如何修改文件时间属性
Feb 05 Python
Python进度条的使用
May 17 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
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP经典面试题集锦
2015/03/19 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
重写javascript中window.confirm的行为
2012/10/21 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
详解jQuery事件
2017/01/13 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Python配置文件处理的方法教程
2019/08/29 Python
python中如何使用insert函数
2020/01/09 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
学雷锋志愿者活动方案
2014/08/21 职场文书
婚宴父母致辞
2015/07/27 职场文书
初中班主任工作随笔
2015/08/15 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
Mysql Show Profile
2021/04/05 MySQL
使用Python拟合函数曲线
2022/04/14 Python