使用全局变量

时间:2017-11-09 10:32:54

标签: python python-import python-3.6

我希望用户能够使用某些值作为全局变量来编写自己的简约脚本文件。

基本上,我想要这样的事情:
bar.py (与main.py相同的目录)

def bar(x):
    return f'bar({x})'

foo.py (可能远离main.py)

b = bar('hi') #I want bar to be a global variable in this file
def foo(x):
    return f'{x}: foo({b})'

main.py (我使用Sebastian's answer on how to import modules

import importlib.util
from bar import bar

spec = importlib.util.spec_from_file_location("", r"/path/to/foo.py") #side question: does the name parameter have any effect on the code?
fooModule = importlib.util.module_from_spec(spec)
spec.loader.exec_module(fooModule) #<---somehow bring bar into foo's globals

print(fooModule.foo('kevin'))

提前感谢您的任何帮助/建议。

编辑:更改了要求以确保栏在加载时是全局的

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。它有点奇怪,但你必须在加载和foo的执行之间设置bar

<强> main.py

import importlib.util
from bar import bar

spec = importlib.util.spec_from_file_location("", r"/path/to/foo.py")
fooModule = importlib.util.module_from_spec(spec)
fooModule.bar = bar #<----
spec.loader.exec_module(fooModule)

print(fooModule.foo('kevin'))