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中的几种数据类型
Jan 02 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python实现微信机器人的方法
Sep 06 Python
python实现猜数字游戏
Mar 25 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
使用python创建Excel工作簿及工作表过程图解
May 27 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
Python reques接口测试框架实现代码
Jul 28 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
Python使用Kubernetes API访问集群
May 30 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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与XML的PDF文档生成技术
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
法定授权委托证明书
2015/06/18 职场文书
Redis三种集群模式详解
2021/10/05 Redis