本文共 821 字,大约阅读时间需要 2 分钟。
# -*- encoding: utf-8 -*-import os'''第52条: 用适当的方式打破循环依赖关系关键:1 相互依赖解释:A文件引用B文件中的内容,B文件又引用了A文件中的内容后果: 循环依赖会抛出异常那个问题原因:python的import有详细机制。引入模块时会按照深度优先顺序执行下列操作:1) 从sys.path指定路径中查找待引入的模块2) 从模块中加载代码并保证代码能够编译3) 创建与该模块相对应的空对象4) 将空模块对象添加到sys.modules中5) 运行模块对象中的代码,定义其内容总结:查找模块->加载模块代码,创建模块的空对象->运行模块对象的代码查找,加载,运行2 循环依赖带来的问题假设A模块引入B模块。B模块又引入A模块。那么A模块未定义任何内容,即A未完成整个引入过程,此时A是空模块,但是B又引入A模块中的内容,但是A此时是空模块,就会报错。3 循环依赖解决办法方法1: 调整引入顺序。 在需要使用的地方而非开始部分就采用import 语句。不推荐,违反pep8方法2: 先引入、再配置、最后运行。 减少模块引入时所产生的副作用。不要再引入时真正运行那些函数。 每个模块提供configure函数,模块引入完成后,在该模块调用一词configure。方法3: 动态引入 在函数或方法内部使用import语句。在真正需要import的时候,才引入对应模块。4 总结两个模块互相调用对方会出现循环依赖翁提。解决循环依赖的最佳方法时把两个模块相互依赖的代码重构为单独模块并放在依赖树的底部。最简单的方式就是动态引入,即真正用到待引入的模块时,才在函数中引入该模块。参考:Effectiv Python 编写高质量Python代码的59个有效方法'''def process(): passif __name__ == "__main__": process()
转载地址:http://hplfn.baihongyu.com/