zoukankan      html  css  js  c++  java
  • 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标签。
    '
      return False
    
  • 相关阅读:
    关于桌面的图片打开很慢的解决方法
    用c#进行递归组合
    ajax,js,css 入门页面
    择日宣判此案,却常再无下文
    共享软件的明确定义
    [转]大逃亡,还没出来呢
    如何收集带有附件的网页
    送一份自家产的软件给园内的兄弟姐妹作“福利”
    [转]评蒙牛内幕
    蓝侠==la*uan,破解中国共享软件联盟著名灌水专家“蓝侠””
  • 原文地址:https://www.cnblogs.com/dreamfine/p/8410348.html
Copyright © 2011-2022 走看看