如何在 python 中使用 'global' 变量?



在我的问题中,我有一个由用户启动的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作为参数传递。

<标题>文件main.py h1> module.py h1> 量避免使用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.pymymodule.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

相关内容

  • 没有找到相关文章

最新更新