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

发布于 2021-02-02 23:19:10

我对全局变量的工作方式感到困惑。我有一个大型项目,大约有50个文件,并且需要为所有这些文件定义全局变量。

我所做的就是在我的项目main.py文件中定义它们,如下所示:

# ../myproject/main.py

# Define global myList
global myList
myList = []

# Imports
import subfile

# Do something
subfile.stuff()
print(myList[0])
我想用myList在subfile.py,如下

# ../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编写或pickle,我就无法考虑如何做到这一点。我不想做

关注者
0
被浏览
89
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    问题是你myList从定义的main.py,但是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
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看