gpt4 book ai didi

python - Python 中嵌套模块的调用

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:14 25 4
gpt4 key购买 nike

我最近一直在处理一个包含 150 多个文件的项目,我在切换模块方面遇到了很大的障碍。

我有一个允许切换模块的功能。它的工作方式如下(我给出了一个简化的解释):

假设有 4 个文件为 first.py , second.py , third.py , fourth.py并且以下每个文件都有一个与其文件名相同的模块,该模块调用其先前的函数,如下所示。

first.py的内容

from second import *
def first():
second()

second.py的内容

from third import *
def second():
third()

third.py的内容:

from fourth import *
def third():
q = raw_input('Use (f)ourth or go (b)ack?')
if q == 'f':
fourth() # proceed to fourth
elif q == 'b':
second() # back to second module
# this is how the switching of modules work

fourth.py的内容:

def fourth():
<stuff1>

现在 first()被调用,解释器要求 f or b .如果f , 然后是 <stuff1>被执行,但是当b是输入,它给出一个 NameError像这样。

Traceback (most recent call last):
File "first.py", line 4, in <module>
first()
File "first.py", line 3, in first
second()
File "test/second.py", line 3, in second
third()
File "test/third.py", line 7, in third
second()
NameError: global name 'second' is not defined

这基本上就是模块切换失败的原因。我试过导入 second.py在第三个文件中添加 from second import second这没有帮助,而是将 ImportError 作为 ImportError: cannot import name second 输出.声明 function names作为global variables也没有帮助。

有什么方法可以实现这一点。或者有更有效的方法来解决切换问题。

编辑:我知道正在创建循环依赖关系,但是有没有其他方法可以在不创建循环依赖关系的情况下启动并运行这 4 个模块。

最佳答案

在我看来这是一个循环导入。问题出在second.pythird.py 之间。您在 second.py 中调用 third,然后在 third.py 中调用 second。你可以阅读this article找出什么是循环进口以及如何防止它们。

附言我建议不要使用此语法从其他模块导入内容。

from ... import * 

这可能会产生名称冲突,并且您不知道该模块中包含什么。更好的选择是只导入您需要的东西或引用模块的特定功能。

关于python - Python 中嵌套模块的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082728/

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