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 with statement 进行文件操作指南
Aug 22 Python
python 上下文管理器使用方法小结
Oct 10 Python
彻底搞懂Python字符编码
Jan 23 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
实时获取Python的print输出流方法
Jan 07 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
python  logging日志打印过程解析
Oct 22 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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中spl_autoload_register函数的用法总结
2013/11/07 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
php post换行的方法
2020/02/03 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
python根据路径导入模块的方法
2014/09/30 Python
python 排序算法总结及实例详解
2016/09/28 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
django下创建多个app并设置urls方法
2020/08/02 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
应届大学生求职的自我评价
2013/11/17 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
地理教师岗位职责
2014/03/16 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
2014年市场部工作总结
2014/11/25 职场文书
谢师宴答谢词
2015/01/05 职场文书
协议书范文
2015/01/27 职场文书
儿子满月酒致辞
2015/07/29 职场文书
感恩主题班会教案
2015/08/12 职场文书
关于运动会的广播稿
2015/08/19 职场文书