【问题标题】:Access a global object by its name than module通过名称而不是模块访问全局对象
【发布时间】:2021-08-17 04:27:37
【问题描述】:

我有一个模块,我在其中读取配置文件并将其存储到变量中。

例如:myconfig.py 看起来像:

cfg = {}

def load(file_path):
    global cfg
    cfg = cfg_file_todict(file_path)

load() 函数在 main() 函数中调用(即在进程开始时)。

我观察到 cfg 变量不能直接导入,但必须通过模块名称访问。

即,假设我有一个文件 a.py,其中:

import myconfig

print(myconfig.cfg) # This prints the config properly across modules

但如果我有:

from myconfig import cfg
print(cfg) # This prints None

是否有某种方式即使是第二种类型的导入仍然可以保留原始变量?还是有其他替代方案?

【问题讨论】:

  • 为什么在函数外使用“全局”关键字?它不是停止导入过程吗?

标签: python-3.x singleton config


【解决方案1】:

#您可以在其他函数中使用全局变量,方法是在为其分配值的每个函数中将其声明为全局变量:

globvar = 0

定义 set_globvar_to_one(): global globvar # 需要修改 globvar 的全局副本 全局变量 = 1

定义 print_globvar(): print(globvar) # 读取globvar的值不需要全局声明

set_globvar_to_one() print_globvar() # 打印 1

【讨论】:

  • 为了将来参考,在代码块上下的行上放置三个反引号是一种简单的方法,可以将其格式化为具有多行和缩进的代码块:如```[enter] this [enter] ```meta.stackoverflow.com/questions/251361/… 是一个更完整的概述,如果您愿意的话
  • 谢谢你的回答,但我猜你没有明白我的问题的意思
猜你喜欢
  • 1970-01-01
  • 2017-08-28
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多