在Python中

时间:2015-04-22 10:25:20

标签: python python-3.x global-variables global

我想知道在多脚本python项目中使用全局变量的最佳方法是什么。 我已经看到了这个问题:Using global variables between files? - 虽然接受的答案有效,但解决方案似乎很笨拙。

请参阅以下脚本集。只有main.py才被直接调用;其余的都是进口的。

首先,我在一个单独的文件中声明了我的全局变量:

#global_vars.py
my_string = "hello world"

main.py使用自定义函数打印字符串的值,更改全局变量的值,然后打印新值

#main.py
import global_vars
import do_things_module

#Print the instantiated value of the global string
do_things_module.my_function()

#Change the global variable globally
global_vars.my_string = "goodbye"

#Print the new value of the global string
do_things_module.my_function()

do_things_module.py包含我们的自定义打印功能,并直接从全局

获取字符串
#do_things_module.py
import global_vars

def my_function():
    print(global_vars.my_string)

必须继续引用global_vars.my_string而不仅仅是my_string来确保我总是读/写全局范围变量似乎是冗长的而不是非常'pythonic'。有更好/更整洁的方式吗?

3 个答案:

答案 0 :(得分:0)

如果您的目标是使用my_string而不是global_vars.my_string,则可以像这样导入模块:

from global_vars import *

您应该可以直接使用my_string

答案 1 :(得分:0)

我会选择

import global_vars as g

然后,您可以在代码中将my_string模块中的global_vars称为g.my_string

它没有占用大量空间,但仍然很明显,my_string来自global_vars且命名空间未被污染

如果您当前模块中只需要几个global_vars变量,则只能导入它们

from global_vars import my_string, my_int

并将其引用为my_stringmy_int

答案 2 :(得分:0)

最重要的是("显式优于隐式")使用

from module import name [as name] ...

但是不要期望能够修改其他模块看到的值(尽管你可以改变可变对象,如果你选择的话)。