全局变量无法传递值python

时间:2014-05-23 12:17:03

标签: python global-variables

我是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'

我无法完全理解为什么会这样。

2 个答案:

答案 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()