我对全局变量的工作方式有点困惑。我有一个大项目,大约有50个文件,我需要为所有这些文件定义全局变量。
我所做的是在我的项目main.py
文件中定义它们,如下所示:
# ../myproject/main.py
# Define global myList
global myList
myList = []
# Imports
import subfile
# Do something
subfile.stuff()
print(myList[0])
我试图在subfile.py
中使用myList
,如下所示
# ../myproject/subfile.py
# Save "hey" into myList
def stuff():
globals()["myList"].append("hey")
我尝试了另一种方法,但也没有成功
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff()
print(globfile.myList[0])
在subfile.py
里面我有这个:
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff():
globfile.myList.append("hey")
但还是没用。我应该如何实现这一点?我知道,当两个文件并不真正了解对方(well subfile不知道main)时,它不能像这样工作,但我想不出如何做到这一点,而不使用io写或pickle,这是我不想做的。
请参阅Python关于sharing global variables across modules的文档:
问题是您从
main.py
定义了myList
,但是subfile.py
需要使用它。这里有一个解决这个问题的干净方法:将所有全局变量移到一个文件中,我称这个文件为settings.py
。此文件负责定义全局参数并初始化它们:接下来,您的
subfile
可以导入全局变量:注意
subfile
不调用init()
-该任务属于main.py
:这样,可以在避免多次初始化全局变量的同时实现目标。
您可以将Python全局变量看作“模块”变量,因此它们比C语言中传统的“全局变量”要有用得多
全局变量实际上是在模块的
__dict__
中定义的,可以作为模块属性从该模块外部访问。所以,在你的例子中:
以及:
相关问题 更多 >
编程相关推荐