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中为什么要用self探讨
Apr 14 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
python实现用户登录系统
May 21 Python
import的本质解析
Oct 30 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Python安装whl文件过程图解
Feb 18 Python
如何解决安装python3.6.1失败
Jul 01 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python处理写入数据代码讲解
Oct 22 Python
Python列表的索引与切片
Apr 07 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安全配置
2006/10/09 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
JavaScript表单验证实现代码
2017/05/22 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
js实现抽奖功能
2020/11/24 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
《荷花》教学反思
2014/04/16 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
学期个人工作总结
2015/02/13 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
python实现自动清理文件夹旧文件
2021/05/10 Python
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL