python-跨文件的全局变量,该如何是好

Posted ntcat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-跨文件的全局变量,该如何是好相关的知识,希望对你有一定的参考价值。

一、设置一个类,存放全局数据

class GlobalVar:

  def __init__(self):
  	self.DB_CONFIG = {}
    self.table_name = \'\' # 表名
	...

调用时,从主模块中,创建实例:

def main(self):
	gv = GlobalVar()
	gv.table_name = \'user\'
	# 当其它类中,需要使用某个全局变量时,通过函数的参数,传递gv过去:
	decl_func.get_auto_increment(gv,field)

在decl_func中这样定义:

def get_auto_increment(gv,field):
  table = gv.table_name

这种方式的缺点是,所有其它文件中,使用全局变量,必须调用主模块中的创建的唯一实例。如果某模块不是直接被主模块调用的,而又需要使用全局变量,就得一层层调用,或者写额外的接口。增加麻烦。

二、get/set方式:

首先创建个全局模块:globalVar.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

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

在需要使用全局变量的文件中引入:
import common.globalVar as gl

但看上去写代码麻烦了一点,一点也不优雅,写一半,看不下去,放弃了。

三、简洁最美:

首先创建个全局模块:global_var.py

#调用方法: 
#import  global_var as gl 
#gl.table_name = \'hhh\'

DB_CONFIG = {}
table_name = \'\' # 表名

在需要使用全局变量的文件中引入:
import common.global_var as gl
然后直接操作gl就行

from common import prase,check,config
import common.global_var as gl

def load():
  """载入各种标签的值,并且检查错误"""
  gl.DB_CONFIG = get_connect_dict(gl.file_name, gl.data)

   gl.table_name = prase.prase_table(gl.data)
   if gl.table_name == \'\':
  gl.msg = gl.file_name +\':没有table标签。\\n\'
  return False

以上是关于python-跨文件的全局变量,该如何是好的主要内容,如果未能解决你的问题,请参考以下文章

Python实现跨文件全局变量的方法(摘抄版)

Python实现跨文件全局变量的方法(2文件优化版)

python中各模块变量共享的问题。

Python实现跨文件全局变量的方法(最终版)

Python 3 实现定义跨模块的全局变量和使用

如何在 C++ 中跨多个源文件共享变量?