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实现读Excel写入.txt的方法
Apr 29 Python
如何实现删除numpy.array中的行或列
May 08 Python
人工神经网络算法知识点总结
Jun 11 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
python如何删除文件中重复的字段
Jul 16 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
使用python绘制温度变化雷达图
Oct 18 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
Java多线程实现四种方式原理详解
Jun 02 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
利用python实现汉诺塔游戏
Mar 01 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的FTP学习(四)
2006/10/09 PHP
用php将任何格式视频转为flv的代码
2009/09/03 PHP
基于empty函数的输出详解
2013/06/17 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
event.srcElement+表格应用
2006/08/29 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
javascript验证身份证号
2015/03/03 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
vue.js 微信支付前端代码分享
2018/02/10 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
Python生成随机密码
2015/03/10 Python
python实现web方式logview的方法
2015/08/10 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
详解Python 循环嵌套
2020/07/09 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
场地使用证明模板
2014/10/25 职场文书
法定代表人身份证明书
2015/06/18 职场文书
小数乘法教学反思
2016/02/22 职场文书
800字作文之大雪
2019/12/04 职场文书