1. 程式人生 > >python-跨文件的全局變量,該如何是好

python-跨文件的全局變量,該如何是好

數據 markdown urn field ras msg 創建 common 標簽

一、設置一個類,存放全局數據

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-跨文件的全局變量,該如何是好