朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
什么叫做相对导入?
一句话!导入同一个包中的模块就叫做相对导入。例如你要导入其它包中的模块,那就不是相对导入,而是绝对导入。
如何用代码来实现相对导入呢?
很简单!在from导入语句中加一个点号就可以了。
from .import spam # Relative to this package
上面就是一个相对导入语句(注意看,import单词前面有一个点号)。代码意思就是从当前代码文件所在的包中导入一个名为spam的模块。注意!注意!注意!在Python 3.0版本后,它只搜索当前的包,如果当前包中没有名为spam的模块,导入就失败了。而在Python2.6中,会先执行相对导入,如果找不到,再继续执行绝对导入,也就是去其它地方继续找。如果没有那个小点号,那么就不是相对导入,那么就不会搜索当前包。
from .spam import name
上面代码的意思是,从当前包中找到一个名为spam的模块,然后导入里面名为name的变量。
为什么要使用相对导入?
一句话!解决导入时的模糊性。这一句话有同学可能理解不了,下面我用很多句话来帮你深入深入又深入滴理解!
假射有一个包,名为mypkg,里面有如下文件
mypkg\__init__.pymain.pystring.py
又假射,在模块main中用下面的代码来试图导入名为string的模块。
import string
问题来了?mypkg包中和Python标准库中都有名为string的模块。如果没有相对导入这么一个技术,那么我们将永远无法导入标准库里的string模块,因为上面的代码首先会找到当前包mypkg中的string。有了相对导入这么一个规定,上面的语句就不会搜索mypkg包,那么就会找到标准库里的string。
如果你想使用mypkg包中的string,那么就要显式滴使用下面的相对导入语法。
from .import string # Imports mypkg.string (relative)
这就是为什么要使用相对导入!
不知道我说明白了没有。欢迎大家留言,留下点回忆!