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实现斐波那契递归函数的方法
Sep 08 Python
django定期执行任务(实例讲解)
Nov 03 Python
教你用Python创建微信聊天机器人
Mar 31 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
使用pip安装python库的多种方式
Jul 31 Python
python中property属性的介绍及其应用详解
Aug 29 Python
Python中的延迟绑定原理详解
Oct 11 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Python djanjo之csrf防跨站攻击实验过程
May 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
php5数字型字符串加解密代码
2008/04/24 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
分享php分页的功能模块
2015/06/16 PHP
php类的定义与继承用法实例
2015/07/07 PHP
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
javascript常用的方法整理
2015/08/20 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
Python PO设计模式的具体使用
2019/08/16 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
交通法规咨询中心工作职责
2013/11/27 职场文书
银行员工职业规划范文
2014/01/21 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
中班中秋节活动反思
2014/02/18 职场文书
车间机修工岗位职责
2014/02/28 职场文书
好的促销活动方案
2014/08/21 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
意向协议书
2015/01/27 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL