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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
Python学习小技巧之列表项的拼接
May 20 Python
浅谈Python处理PDF的方法
Nov 10 Python
Flask解决跨域的问题示例代码
Feb 12 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
详解Numpy中的广播原则/机制
Sep 20 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
Python面向对象编程基础实例分析
Jan 17 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 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
使用dump函数,给php加断点测试
2013/06/25 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
javascript 二分法(数组array)
2010/04/24 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Tensorflow累加的实现案例
2020/02/05 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
金讯Java笔试题目
2013/06/18 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
法律六进活动方案
2014/03/13 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
保护环境建议书400字
2014/05/13 职场文书
法律顾问服务方案
2014/05/15 职场文书
2014年国庆标语
2014/06/30 职场文书
募捐感谢信
2015/01/22 职场文书
禁毒主题班会教案
2015/08/14 职场文书
基于Python实现对比Exce的工具
2022/04/07 Python
Mysql中常用的join连接方式
2022/05/11 MySQL