本篇内容主要讲解“Python全局变量在不同模块中共享的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python全局变量在不同模块中共享的原理是什么”吧!
使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字
a = 1 b = [1,2] def func(): print(a, b) if __name__ == '__main__': func()
使用到的全局变量,需要在函数中修改的话,就涉及到歧义问题
a = 1 b = [1,2] def func(): a = 2 b[0] = 3 print(a, b) if __name__ == '__main__': func()
变量a,在函数func中"a = 2",既可以表示引用全局变量a,也可以表示创建一个新的局部变量,此时python默认按照新的局部变量来处理,但对于列表b而言,"b[0] = 1"不存在这种歧义,因此直接修改了全局变量,但是如果改成了"b = [3, 4]",那么b也会变成局部变量。
特别地,当在func中a = 2之前加入"if a == 1:"这一语句,脚本运行出错,因为这一语句引入了全局变量,导致了"a = 2"这一语句无法创建同名的局部变量。
因此,需要修改全局变量a,可以在"a = 2"之前加入global a声明,如:
a = 1 b = [2, 3] def func(): global a a = 2 b[0] = 1 if __name__ == '__main__': func()
结论:引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。
Python 中 global 关键字可以定义一个变量为全局变量,但是这个仅限于在一个模块(py文件)中调用全局变量,在另外一个py文件 再次使用 global x 也是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错 未定义。
借鉴global 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定义一个“全局变量管理模块”就好了
全局变量管理模块 globalvar.py
def _init(): global _global_dict _global_dict = {} def set_value(name, value): _global_dict[name] = value def get_value(name, defValue=None): try: return _global_dict[name] except KeyError: return defValue
设置全局变量 a.py
import sys import globalvar as gl gl._init() gl.set_value('name', 'cc') gl.set_value('score', 90)
获取全局变量 b.py
import globalvar as gl name = gl.get_value('name') score = gl.get_value('score') print("%s: %s" % (name, score))
主程序 main.py
import aimport b
运行主程序文件 python main.py,得出的结果是 cc: 90
形式上全局变量在不同模块中共享,其实还是遵循全局变量仅限于在一个模块使用原则,a、b两个模块都有同样的模块引入
import globalvar as gl
虽然形式上是在不同文件中操作相同的全局变量,但实质上都是操作一个文件(globalvar)中的全局变量,main.py略作修改
import a import b import globalvar as gl print(gl.get_value('name'))
到此,相信大家对“Python全局变量在不同模块中共享的原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。