发布网友 发布时间:2022-04-06 01:58
共2个回答
热心网友 时间:2022-04-06 03:28
除了让包内导入更加显式,这个功能的一部分设计初衷是,为了帮助脚本解决同名文件出现在模块搜索路径上多个不同位置时的二义性。考虑包目录,这定义了一个名为mypkg 的包,其中含有名为mypkg.main和mypkg.string 的模块。现在,假设模块main试图导入名为string的模块。在 Python 2.X和更早版本中,Python会先寻找mypkg目录以执行相对导入。这会找到并导入位于该处的string.py文件,将其赋值给mypkg.main模块命名空间内的名称string。热心网友 时间:2022-04-06 04:46
1 基本原理
在 Python 里面,一个 .py 文件可以称为模块,包含了 __init__.py 文件的称为包。
当一个模块被执行时,Python 会从 sys.path 给出的路径去找在模块中引入的包或其它模块,如果找不到,程序就会报错。
2 绝对导入
绝对导入是默认的导入方式,因为它更常见,并且它有相对导入的所有功能。
2.1 用法
绝对导入可以使用 import <> 或 from <> import <> 这两种语法,比如在 moleA 模块里面,使用下面的绝对导入语句是有效的。
作者:拯救梦想
链接:https://zhuanlan.hu.com/p/145903888
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2 不足
导入同一个包下的模块需要写完整的导入路径,如果层级很深,这个路径会显得很长。
假如要改变层级较高的包名,比如顶级包,那么所有导入路径都要改。
3 相对导入
相对导入解决了绝对导入的一些问题:
同一个包下的模块可以很方便的相互引用,使用像 from . import xxx 的语句就行。
顶层包的报名改了,包下的模块的相对导入的语句基本不用改。
3.1 用法
相对导入只能使用 from <> import <> 这种语法,并且使用 . 作为前导点。
作者:拯救梦想
链接:https://zhuanlan.hu.com/p/145903888
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。