gpt4 book ai didi

python - 从单次导入访问 python 应用程序中的全局变量

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:34 28 4
gpt4 key购买 nike

所以,我想做的是将 python 解释器用作我的服务器端 python 应用程序的 CLI。但是,我在加载 python 模块时遇到了意想不到的行为。

我有两个 python 文件和一个缓存文件:

Main.py
Config.py
Cache.json

那么发生的事情是,当 Main 被导入并运行时,main() 函数会导入 Configs,然后调用一个函数来初始化 Config。初始化时,Config 会根据我运行的环境从 Cache.json 加载一些全局变量。这是 .py 的简化示例。

#Main.py
import Config

def main():
"""Initialize Python Application"""
Config.init()


if __name__ == "__main__":
main()

#Config.py
import os
import json

Default_MSSQLPassword = ""
Default_MSSQLUser = ""
Default_OdbccDriver = ""
MDGSQLP01 = ""


def init():
"""docstring"""

with open("Cache.json", "r") as f:
dtGlobalConstants = json.load(f)

Default_MSSQLPassword = dtGlobalConstants["Default_MSSQLPassword"]
Default_MSSQLUser = dtGlobalConstants["Default_MSSQLUser"]
Default_OdbccDriver = dtGlobalConstants["Default_OdbccDriver"]
MDGSQLP01 = dtGlobalConstants["MDGSQLP01"]

现在理论上,如果我在 python 解释器中调用以下内容:

>>>from Main import main
>>>main()

Config 应该由 main() 导入,持久化,我应该能够打印从 Cache.json 加载的 Default_OdbccDriver 的缓存值。但是我得到了这个:

>>>Config.Default_OdbccDriver
>>>''

很明显 Main 正在导入 Config.py,否则我在调用属性 .Default_OdbccDriver 时会出错。然而,即使 Default_OdbccDriver 的值应该是“全局的”(根据 python 对这个词的奇怪定义),它的值也应该是静态的并且在导入缓存中持久存在。

有人知道发生了什么或如何解决它吗?最后,我希望 main() 初始化一些值并公开一些用于我的应用程序的方法,但这不是一个好的开始...

最佳答案

您应该在 init 函数中将您的变量声明为 global,否则您只是设置函数的一些局部变量来遮蔽全局变量:

def init():
"""docstring"""
global Default_MSSQLPassword
global Default_MSSQLUser
global Default_OdbccDriver
global MDGSQLP01

with open("Cache.json", "r") as f:
dtGlobalConstants = json.load(f)

Default_MSSQLPassword = dtGlobalConstants["Default_MSSQLPassword"]
Default_MSSQLUser = dtGlobalConstants["Default_MSSQLUser"]
Default_OdbccDriver = dtGlobalConstants["Default_OdbccDriver"]
MDGSQLP01 = dtGlobalConstants["MDGSQLP01"]

正如您在评论中所说,在将变量绑定(bind)到 Main.Config.your_var_name 的 session 中导入时,为了解决这个问题应该足以在模块中也将它们声明为全局变量:

#Config.py
import os
import json

global Default_MSSQLPassword
global Default_MSSQLUser
global Default_OdbccDriver
global MDGSQLP01

Default_MSSQLPassword = ""
Default_MSSQLUser = ""
Default_OdbccDriver = ""
MDGSQLP01 = ""


def init():
"""docstring"""
global Default_MSSQLPassword
global Default_MSSQLUser
global Default_OdbccDriver
...

关于python - 从单次导入访问 python 应用程序中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51088997/

28 4 0
文章推荐: python - Flask 应用程序已达到 QueuePool 限制
文章推荐: css - DIV 内没有填充问题
文章推荐: css - 在没有 JavaScript 的情况下单击时更改
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com