Python 2或3循环导入说明
我知道这个问题已经被问过/回答过很多次了,但我对我的具体情况很好奇——我还没有看到一个我完全理解的答案Python 2或3循环导入说明,python,import,Python,Import,我知道这个问题已经被问过/回答过很多次了,但我对我的具体情况很好奇——我还没有看到一个我完全理解的答案 有几个模块导入同一个模块是否不好?所以,假设我有一些通用实用程序模块,我重用了很多,modulex.py和moduley.py都导入了它。然后说modulex需要导入moduley。在这一点上,我引入了坏的jujuju吗?如果M持有一些全局状态,然后被一些N*模块修改,那么将导入模块M与模块N1、N2、N3相乘是不好的。然后,副作用的发生取决于导入顺序 通常在干净的代码中,情况并非如此,如果您
有几个模块导入同一个模块是否不好?所以,假设我有一些通用实用程序模块,我重用了很多,modulex.py和moduley.py都导入了它。然后说modulex需要导入moduley。在这一点上,我引入了坏的jujuju吗?如果
M
持有一些全局状态,然后被一些N*
模块修改,那么将导入模块M
与模块N1
、N2
、N3
相乘是不好的。然后,副作用的发生取决于导入顺序
通常在干净的代码中,情况并非如此,如果您只持有类定义和函数,以及不可修改/修改的全局变量,那么您应该完全没有问题。No,这是完全正常的,除非您的模块级代码中有副作用。如果模块M有一个类变量,该变量由导入它的模块修改,该怎么办?或者,这就是你所说的“仅保留类定义和函数”的意思吗?是的,这就是这个答案所描述的那种情况,“如果
M
保留一些全局状态”-一般来说,设计模块使其具有可变的模块级变量是一个坏主意,正是出于这个原因。有一些特殊情况是有意义的,但是你应该避开它们,除非你确定自己知道自己在做什么。虽然它并不完全包含可变变量,但内置的记录器
模块可以作为考虑何时在多个导入中共享模块级状态的起点。