Python 全局变量无法传递值
我是python新手,尝试使用全局变量是因为我可以通过中间文件Global\u var.py在两个文件test1.py和test2.py之间传输值。我能够把这些从我在几个问题和演示中读到的东西组合起来。但我不确定我是否在写,因为它不起作用。请告诉我哪里出了问题 全局变量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()
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解释器进程更改磁盘时,它们不会写入磁盘。是。我正在分别执行它们。我要怎样才能达到我想做的事情呢@martijnpietersglobal\u var
中的init()
函数是完全冗余的。global
关键字仅影响编译时在该函数中处理名称的方式。这里不需要函数,也不需要调用它。是否分别执行test1.py
和test2.py
?如果是,则否,模块全局变量不会持续存在;当一个Python解释器进程更改磁盘时,它们不会写入磁盘。是。我正在分别执行它们。我要怎样才能达到我想做的事情呢@MartijnPietersEven Pickle在本例中可用于创建对象。@New_User123:我不打算创建一个详尽的列表。请注意,shelve
在引擎盖下使用pickle
。在这种情况下,即使pickle也可以用来创建对象。@New\u User123:我不打算创建一个详尽的列表。请注意,shelve
在引擎盖下使用pickle
。