Python 全局变量无法传递值

Python 全局变量无法传递值,python,global-variables,Python,Global Variables,我是python新手,尝试使用全局变量是因为我可以通过中间文件Global\u var.py在两个文件test1.py和test2.py之间传输值。我能够把这些从我在几个问题和演示中读到的东西组合起来。但我不确定我是否在写,因为它不起作用。请告诉我哪里出了问题 全局变量 key_gen = [] def init(): global key_gen test1.py import global_var global_var.init()

我是python新手,尝试使用全局变量是因为我可以通过中间文件Global\u var.py在两个文件test1.pytest2.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时,我得到以下错误

   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'
回溯(最近一次呼叫最后一次):
文件“test2.py”,第3行,在
k=全局变量密钥生成
AttributeError:“module”对象没有属性“key\u gen”

我无法完全理解为什么会发生这种情况。

您误解了模块全局变量的生命周期。Python解释器中的更改状态不会持久化到磁盘。从脚本更改
global\u var.key\u gen
不会导致解释器再次退出时保存该更改


您必须显式地将更改写入磁盘。有很多选择;您可以使用将列表写入磁盘(首先打开一个文件对象),也可以使用创建一个字典,该字典的内容将自动持久化到磁盘。

您误解了模块全局变量的生命周期。Python解释器中的更改状态不会持久化到磁盘。从脚本更改
global\u var.key\u gen
不会导致解释器再次退出时保存该更改


您必须显式地将更改写入磁盘。有很多选择;您可以使用将列表写入磁盘(首先打开一个文件对象),也可以使用创建一个字典,该字典的内容将自动保存到磁盘。

这里您分别运行test1.py和test2.py文件。如果您在单个文件中使用多个类和多个函数,则意味着您可以更改全局值或设置全局值。在重置键根值后,您可以在运行test1.py文件时为键根赋值。当您运行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()  

这里分别运行test1.py和test2.py文件。如果您在单个文件中使用多个类和多个函数,则意味着您可以更改全局值或设置全局值。在重置键根值后,您可以在运行test1.py文件时为键根赋值。当您运行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()  

global\u var
中的
init()
函数是完全冗余的。
global
关键字仅影响编译时在该函数中处理名称的方式。这里不需要函数,也不需要调用它。是否分别执行
test1.py
test2.py
?如果是,则否,模块全局变量不会持续存在;当一个Python解释器进程更改磁盘时,它们不会写入磁盘。是。我正在分别执行它们。我要怎样才能达到我想做的事情呢@martijnpieters
global\u var
中的
init()
函数是完全冗余的。
global
关键字仅影响编译时在该函数中处理名称的方式。这里不需要函数,也不需要调用它。是否分别执行
test1.py
test2.py
?如果是,则否,模块全局变量不会持续存在;当一个Python解释器进程更改磁盘时,它们不会写入磁盘。是。我正在分别执行它们。我要怎样才能达到我想做的事情呢@MartijnPietersEven Pickle在本例中可用于创建对象。@New_User123:我不打算创建一个详尽的列表。请注意,
shelve
在引擎盖下使用
pickle
。在这种情况下,即使pickle也可以用来创建对象。@New\u User123:我不打算创建一个详尽的列表。请注意,
shelve
在引擎盖下使用
pickle