python - 在文件之间使用全局变量?

我对全局变量的工作方式有点困惑。我有一个大项目,大约有 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")

但又一次,它没有用。我应该如何实现这个?我知道它不能那样工作,当这两个文件并不真正了解对方(以及子文件不知道主文件),但我想不出如何做到这一点,而不使用 io 写入或泡菜,哪个我不想做。

最佳答案

问题是你从main.py定义了myList,但是subfile.py需要用到它。这是解决此问题的一种简洁方法:将所有全局变量移动到一个文件中,我将此文件称为 settings.py。该文件负责定义全局变量并对其进行初始化:

# settings.py

def init():
    global myList
    myList = []

接下来,你的 subfile 可以导入全局变量:

# subfile.py

import settings

def stuff():
    settings.myList.append('hey')

请注意,subfile 不会调用 init()——该任务属于 main.py:

# main.py

import settings
import subfile

settings.init()          # Call only once
subfile.stuff()         # Do stuff with global var
print settings.myList[0] # Check the result

这样,您可以实现目标,同时避免多次初始化全局变量。

https://stackoverflow.com/questions/13034496/

相关文章:

python - 如何检查浮点值是否为整数

c - [ N ... M ] 在 C 聚合初始值设定项中是什么意思?

linux - 从 ps -ef |grep 关键字获取 pid

linux - 如何通过 * 将包括隐藏文件在内的所有文件移动到父目录中

python - 如何检查变量是否为具有 python 2 和 3 兼容性的字符串

linux - 如何在不打开 Linux 的情况下找到所有串行设备(ttyS、ttyUSB、..)?

python - 何时在 Python 中使用 %r 而不是 %s?

linux - Java 进程列表

python - 如何在 Windows 7 的命令提示符中运行 Python 程序?

python - 如何为每个子图添加标题