在Python中如何避免循环导入?

在Python中如何避免循环导入?,python,import,circular-dependency,Python,Import,Circular Dependency,当您的项目包含两个或更多文件,并且最终需要到处导入所有内容时,您如何管理这种情况 --main.py ---some-stuff.py ---some-stuff2.py 我不能选择循环依赖,但程序的结构要求它。 除了在一个文件中完成所有工作(包括所有代码)之外,还有什么方法可以管理这种情况吗?标准答案 将数据位作为参数传递给在some stuff.py中调用的函数 如果您的some stuff.py定义了一个函数foo,该函数需要在main中定义的一些字段bar,请将foo的定义更改为foo

当您的项目包含两个或更多文件,并且最终需要到处导入所有内容时,您如何管理这种情况

--main.py
---some-stuff.py
---some-stuff2.py
我不能选择循环依赖,但程序的结构要求它。
除了在一个文件中完成所有工作(包括所有代码)之外,还有什么方法可以管理这种情况吗?

标准答案

将数据位作为参数传递给在
some stuff.py中调用的函数

如果您的
some stuff.py
定义了一个函数
foo
,该函数需要在
main
中定义的一些字段
bar
,请将
foo
的定义更改为
foo(bar,)
,当
main.py
中的脚本调用
foo
时,它可以将其称为
foo(bar,)

解决您的限制

您提到“在某些情况下,通过向函数调用传递参数是无法实现的,因为变量可能在那时没有它们的值”


如果在
某些东西中有函数
,这些函数需要
main
中的变量才能给定值,那么应该将函数分解为多个函数,以便在所需值可用之前不会调用该函数。无论如何,这可能会提高代码的模块化程度。

一般的答案是“使各部分不需要彼此了解太多”。在任何特定情况下,您如何做到这一点可能会有所不同。也许有一种方法可以使子任务更加独立地划分工作。也许你真的可以把必要的信息作为参数传递,但是你还没有意识到怎么做。也许面向对象编程可以让您更好地管理程序的状态。这很难说。如果你提供一些具体的例子会有所帮助。听起来你把代码分割得很糟糕。我很想先将所有内容复制到main.py中,然后再考虑如何将内容移出main.py。