gpt4 book ai didi

python - 是否可以将模块注入(inject)到导入模块的全局变量中?

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:46 27 4
gpt4 key购买 nike

我有一个文件hello.py,它有一个函数hello()

hello.py:

def hello():
print "hello world"

我有另一个文件 test.py,它导入了 hello,并调用了函数。

测试.py:

from hello import *

def run():
hello()

if __name__ == '__main__':
run()

如果我通过 python 运行 test.py,它会按预期工作:

$ python test.py
hello world

但是,现在我编辑 test.py,并删除导入语句:

测试.py:

def run():
hello() # hello is obviously not in scope here

if __name__ == '__main__':
run()

我介绍了第三个文件,run.py,它导入了 hello.pytest.py

run.py:

from hello import *
from test import *

if __name__ == '__main__':
run()

自然这不起作用,因为hello() 不在test.py 的 范围内。

$ python run.py 
Traceback (most recent call last):
File "run.py", line 5, in <module>
run()
File "test.py", line 4, in run
hello()
NameError: global name 'hello' is not defined

问题:

  • 是否有可能从 run.py 注入(inject) hello()test.py 的 范围,< strong>没有 run.py 导入 hello.py?

我很高兴使用较低级别的功能,例如 imp模块,如果这是必需的。

最佳答案

是的。模块的属性它的全局变量,所以你可以直接把它戳进去。

import test
import hello
test.hello = hello.hello

我会重申 wim 的评论,即这通常不是一个好主意。

关于python - 是否可以将模块注入(inject)到导入模块的全局变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41005057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com