我是python的新手并试图使用全局变量我可以通过中间文件在两个文件 test1.py 和 test2.py 之间传输值global_var.py 。我能够通过几个stackoverflow问题和演示中的内容将这些内容组合在一起。但是我不确定是否正在写它因为它不起作用。请告诉我哪里出错了
global_var.py
key_gen = []
def init():
global key_gen
test1.py
import global_var
global_var.init()
global_var.key_gen = [1,2,3]
test2.py
import global_var
k = global_var.key_gen
print k
然而,印刷品没有给出[1,2,3]。它改为[]。你能告诉我怎样才能做到这一点?提前致谢
编辑:如果我删除此声明
key_gen = []
来自 global_var.py 并再次运行相同的代码,执行 test1.py 时我没有收到任何错误,但是当我运行 test2.py < / strong>我收到以下错误
Traceback (most recent call last):
File "test2.py", line 3, in <module>
k = global_var.key_gen
AttributeError: 'module' object has no attribute 'key_gen'
我无法完全理解为什么会这样。
答案 0 :(得分:4)
您误解了模块全局变量的生命周期。改变Python解释器中的状态是不持久化到磁盘。从脚本更改global_var.key_gen
不会导致在解释器再次退出时保存更改。
您必须明确将更改写入磁盘。有许多选项可供选择;您可以使用json.dump()
(首先打开文件对象)将列表写入磁盘,或者您可以使用shelve
module创建一个字典,其内容会自动保存到磁盘。
答案 1 :(得分:4)
这里你单独运行test1.py和test2.py文件。如果在单个文件中使用多个类和多个函数,则意味着您可以更改全局值或设置全局值.u可以在重置keygen_value之后运行test1.py文件时为key_gen分配值。当你运行test2.py文件时,你只能得到空值,因为python解释器将值存储在缓冲区中。见下面的示例
key_gen=0
class test1:
def hai(self):
global key_gen
key_gen=10
print key_gen
class test2:
def hai1(self):
global key_gen
print key_gen
instance1=test1()
instance1.hai()
instance2=test2()
instance2.hai1()