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 05 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
Apr 20 Python
Python 基础教程之str和repr的详解
Aug 20 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
python enumerate内置函数用法总结
Jan 07 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
详解如何修改python中字典的键和值
Sep 29 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 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 和 COM
2006/10/09 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
JS命名空间的另一种实现
2013/08/09 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
node.js实现端口转发
2016/04/14 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
js实现轮播图特效
2020/05/28 Javascript
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
彻底搞懂Python字符编码
2018/01/23 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
Django如何批量创建Model
2020/09/01 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Python下载的11种姿势(小结)
2020/11/18 Python
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
演讲稿怎么写才完美
2014/01/02 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
库房保管员岗位职责
2014/04/07 职场文书
吨的认识教学反思
2014/04/27 职场文书
住宅使用说明书
2014/05/09 职场文书
教师工作证明范本
2015/06/12 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android