在我的问题中,我有一个由用户启动的python代码,如:
# file main.py
import sys
import mymodule
config = sys.argv[1]
导入另一个包含函数、类等的模块,如
# module.py
def check_config():
# do something with the content of 'config'
class Module(object):
# does something with the content of 'config'
我如何从module.py
内访问'config'的值?我应该在这里使用"全局"变量吗?或者是否有更复杂的python方法来解决这个问题?
另外,我不想为我在其他模块中使用的每个函数和类定义一个参数'config'…
进一步说明:main.py
导入其他模块,而不是其他方式…
不要试图让global
执行此操作,您应该将config
作为参数传递。
global
。如果你需要修改config
,只需有一个模块函数返回它。
config = change_config(config)
<标题> module.py h1> p>然而,另一种方法是在module.py
中定义一个值,该值将在默认情况下不保存任何信息。然后,只要file main.py
导入了module.py
,并且配置数据准备好了,您就可以将数据分配给module.py
的配置名称。这样的:<标题>文件main.py h1> module.py h1> 标题>标题>标题>
我不建议使用全局变量,但如果您这样做,则应该使用以下设计。config
需要在mymodule
中定义;导入模块后,可以像当前设置config
一样设置mymodule.config
的值。
# file main.py
import sys
import mymodule
mymodule.config = sys.argv[1]
# module.py
# The exact value doesn't matter, as long as we create the name.
# None is good as it conveys the lack of a value; it's part of your
# module's contract, presumably, that a proper value must be assigned
# before you can use the rest of the module.
config = None
def check_config():
# do something with the content of 'config'
class Module(object):
# does something with the content of 'config'
全局变量几乎从来不是答案。只要允许函数和类在你的"库"(module.py
或mymodule.py
,你似乎使用两者)接受参数。所以:
mymodule.py
def check_config(configuration):
pass
class Module(object):
def __init__(self, configuration):
self.config = configuration
class ConfigError(Exception):
pass
当你想在你的"application"代码中使用它们时:
main.py
import sys
import mymodule
config = sys.argv[1]
if mymodule.check_config(config):
myobject = mymodule.Module(config)
else:
raise mymodule.ConfigError('Unrecognized configuration format.')
你能描述一下你的应用程序应该做什么吗?因为现在不清楚,你为什么想要它。也许环境变量能帮到你?
顺便说一句,你可以在一个地方(模块)读取配置文件,并从它导入所有你需要的东西。
config.py
import os
if os.environ['sys'] == 'load_1':
import load_1 as load
i = 12
else:
import load_2 as load
i = 13
main.py
import config
config.load("some_data")
print config.i