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 计算文件的md5值实例
Jan 13 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
如何用python整理附件
May 13 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
10个Python面试常问的问题(小结)
Nov 20 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
python re的findall和finditer的区别详解
Nov 15 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
php-fpm中max_children的配置
2019/03/15 PHP
php解决安全问题的方法实例
2019/09/19 PHP
javascript import css实例代码
2008/07/18 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python实现横向拼接图片
2020/03/23 Python
python 实现的车牌识别项目
2021/01/25 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
村委会贫困证明
2014/01/14 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
MySQL表字段时间设置默认值
2021/05/13 MySQL
浅谈MySQL中的六种日志
2022/03/23 MySQL
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技