python的循环引用
什么是循环引用
最近写代码遇见了几次python的循环调用问题,主要原因肯定是编码不规范,应该是共同调用的代码抽离出来重新封装,而不是B里面有A需要的代码,同时A里面也有B需要的代码,这样交叉引用python就会报错
当我们import一个python文件时,python会首先去查找这个文件之前是否被import过,如果这个文件之前有被import过,就不会重新再import一次。否则会倒入,并执行一边代码。
python核心编程这本书也说过这个问题:
加载模块会导致这个模块被执行。也就是被执行模块的顶层代码将直接被执行。这通常包含设定全局变量以及类和函数的声明。一个模块只被加载一次,无论它被导入多少次。这可以阻止多重导入时代码被多次执行
如何解决
1、最好的解决方案当然是抽离出来公用函数,重新封装。防止循环引用
2、 解决方案1
from common.xx import GetR****
修改为:from common.xx import *
3、解决方案2
把import放在函数里面 需要用到的时候在import
这个仅是权宜之计。
4、解决方案3
直接倒入模块名,需要的函数由模块名调用
import
5、解决方案4
使用TYPE_CHECKING
1 | if TYPE_CHECKING: |