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中xrange用法分析
Apr 15 Python
简单了解Django模板的使用
Dec 20 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
Apache部署Django项目图文详解
Jul 30 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
python os.rename实例用法详解
Dec 06 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 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/05/29 PHP
PHP 中常量的知识整理
2017/04/14 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
全面解析vue中的数据双向绑定
2017/05/10 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python模拟登录12306的方法
2014/12/30 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
举例讲解Python中is和id的用法
2015/04/03 Python
Python中max函数用法实例分析
2015/07/17 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Unicode和Python的中文处理
2017/03/19 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
Python中的元组介绍
2019/01/28 Python
python db类用法说明
2020/07/07 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
平面设计专业求职信
2014/08/09 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript