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 默认参数问题的陷阱
Feb 29 Python
理解Python中的With语句
Mar 18 Python
django批量导入xml数据
Oct 16 Python
python中的字典操作及字典函数
Jan 03 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
python对html过滤处理的方法
Oct 21 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
浅谈Python协程
Jun 17 Python
python从PDF中提取数据的示例
Oct 30 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
Python入门之基础语法详解
May 11 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实现根据银行卡号判断银行
2015/04/29 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
如何使用Python调整图像大小
2020/09/26 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
Pandas之缺失数据的实现
2021/01/06 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
材料员岗位职责
2014/03/13 职场文书
博士生专家推荐信
2014/09/26 职场文书
收银员岗位职责范本
2015/04/07 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
门球健将观后感
2015/06/16 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
php去除数组中为0的元素的实例分析
2021/11/17 PHP