时间:2021-05-22
尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖。
Python 中 global 关键字可以定义一个变量为全局变量,但是这个仅限于在一个模块(py文件)中调用全局变量:
我们知道Python使用变量的时候是可以直接使用的,x=[] ,y=2,z="123",而不需要先定义(var x; var y=2;var z='222'),这样的话,在函数内部就无法操作外部的变量了,因为它总会认为你是在定义一个新变量并且赋值,不过 global 就可以解决这个问题。
global 的基础用法 :
x = 6def func(): global x #定义外部的x x = 1func()print (x)#输出1这个时候,即使你在另外一个py文件 再次使用 global x 也是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错 未定义。
那么我们怎么办?
借鉴global 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定义一个“全局变量管理模块”就好了
具体代码:
# -*- coding: utf-8 -*-def _init():#初始化 global _global_dict _global_dict = {}def set_value(key,value): """ 定义一个全局变量 """ _global_dict[key] = valuedef get_value(key,defValue=None): """ 获得一个全局变量,不存在则返回默认值 """ try: return _global_dict[key] except KeyError: return defValue相信如果你看懂了就应该知道思路了,利用global的单独文件全局性,从而可以定义在一个文件中的全局变量,然后这个单个文件的全局变量可以保存多个文件的共同全局变量
操作的时候,以Key对Value 的方法操作,我相信大家都懂。
# -*- coding:utf-8 -*-from YourPage import golgol._init()#先必须在主模块初始化(只在Main模块需要一次即可)#定义跨模块全局变量gol.set_value('CODE','UTF-8')gol.set_value('PORT',80)gol.set_value('HOST','127.0.0.1')然后其他的任何文件只需要导入即可使用:
# -*- coding: utf-8 -*-from YourPage import gol#不需要再初始化了ROOT = gol.get_value('ROOT',80)CODE = gol.get_value('CODE')
就这么简单~
就这样就可以实现跨文件的全局变量使用;
并且还有一个简单但是强大的全局变量管理器,你可以自己添油加醋,实现一些比如全局变量禁止直接修改,禁止修改某些只可读的全局变量等等。
总结
以上所述是小编给大家介绍的Python 3 实现定义跨模块的全局变量和使用教程,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.符号分类(1)全局符号:非静态全局变量,非静态函数(2)外部符号:定义于其它模块,而被本模块引用的全局变量和函数(3)本地符号:静态变量(包括全局和局部),
变量的作用域和存储方式1.简述变量按作用域的分类变量按作用域分:分为全局变量和局部变量全局变量:在所有函数外部定义的变量叫做全局变量全局变量的使用范围:从定义位
本文实例讲述了python中global用法。分享给大家供大家参考。具体分析如下:1、global---将变量定义为全局变量。可以通过定义为全局变量,实现在函数
定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域。本文主要讲述全局变量、局部变量和导入模块变量的方法。参考:《Python核心编程(第二版
Python中的变量作用域一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用