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赋值操作方法分享
Mar 23 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
跟老齐学Python之集合(set)
Sep 24 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python登录注册验证功能实现
Jun 18 Python
Python调用服务接口的实例
Jan 03 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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中unserialize返回false的解决方法
2014/09/22 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
js实现简单点赞操作
2020/03/17 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
PyQt5每天必学之布局管理
2018/04/19 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
如何用python批量调整视频声音
2020/12/22 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
销售总监岗位职责
2014/01/04 职场文书
大学生创业感言
2014/01/25 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
python+opencv实现目标跟踪过程
2022/06/21 Python
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers