擅长:python、mysql、java
<p>当您第一次导入一个模块(或它的一个成员)时,模块内的代码将像任何其他代码一样按顺序执行;例如,对函数体的处理没有任何不同。<code>import</code>与任何其他命令(赋值、函数调用、<code>def</code>、<code>class</code>)一样,只是命令。假设您的导入发生在脚本的顶部,则会发生以下情况:</p>
<ul>
<li>当您尝试从<code>world</code>导入<code>World</code>时,将执行<code>world</code>脚本。</li>
<li><code>world</code>脚本导入<code>Field</code>,这将导致<code>entities.field</code>脚本被执行。</li>
<li>此过程将继续,直到您到达<code>entities.post</code>脚本,因为您试图导入<code>Post</code></li>
<li><code>entities.post</code>脚本导致执行<code>physics</code>模块,因为它试图导入<code>PostBody</code></li>
<li>最后,<code>physics</code>尝试从<code>entities.post</code>导入<code>Post</code></li>
<li>我还不确定<code>entities.post</code>模块是否存在于内存中,但这真的无关紧要。模块不在内存中,或者模块还没有<code>Post</code>成员,因为它还没有完成定义<code>Post</code></em>的执行</li>
<li>不管怎样,都会发生错误,因为<code>Post</code>不存在要导入的</li>
</ul>
<p>所以不,它不是“在调用堆栈中进一步工作”。这是发生错误的堆栈跟踪,这意味着尝试在该类中导入<code>Post</code>时出错。你不应该使用循环导入。充其量,它有微不足道的好处(通常,<em>no</em>benefit),并且它会导致这样的问题。它给任何维护它的开发人员带来负担,迫使他们走在蛋壳上以避免破坏它。重构模块组织。</p>