您应该将config 作为参数传递,而不是试图让global 执行此操作。
文件 main.py
import sys
import mymodule
config = sys.argv[1]
checked = mymodule.check_config(config)
mod = mymodule.Module(config)
模块.py
def check_config(config):
# do something with the content of 'config'
class Module(object):
# does something with the content of 'config'
def __init__(self, config):
# initialise with config
尽可能避免使用global。如果您需要修改config,只需一个模块函数返回即可。
config = change_config(config)
模块.py
def change_config(config):
...
return config
但是,另一种方法是在module.py 中定义一个值,它将存储默认情况下不包含任何内容的此信息。然后当file main.py 导入module.py 并且配置数据准备好后,您可以将数据分配给module.py 的配置名称。像这样:
文件 main.py
import sys
import mymodule
config = sys.argv[1]
mymodule.config = config
mymodule.test_config()
mymodule.check_config()
mymodule.Module()
模块.py
config = None
def test_config():
print config
# this will refer to the value supplied from file main.py
但是请注意,模块和主文件中的值不会被连接。如果您出于任何原因重新分配 file main.py 中的配置,则必须再次将该值传递给模块。但是,如果您传递一个可变值(如 dict 或列表),那么您可以在 file main.py 中对其进行修改,并且这些值将被共享。