最近在学python,看到了包的导入部分,绝对导入还好,相对导入搞得人脑袋发晕看不明白,所以费了一番功夫去查资料,然后在这里分享一些个人心得,如果有误还请见谅,本人虚心接受来自各位“看官”的批评指正。当然,如果本人解释还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!
在正式开讲之前,需要先对一些重点事项进行说明:
一、入口文件是什么?——按照定义,入口文件是指__name__=’__main__’的文件,可能这么讲小伙伴们可能还不甚理解,但是没关系,下面会举例说明
二、包的相对导入规则是什么?
1、相对导入只能只用from XXX import XXX
2、入口文件中不能使用相对导入!!!(这点一定要牢记!!!)
3、"."表示当前目录,“..”表示上级目录,“...”表示上上级目录
现在进入举例环节:
先给出文件的结构关系,以及各个文件中具体的代码
文件的结构关系如下:
其中后缀为.py的文件是“模块文件”,含有__init__.py的文件夹是“包”
并且,由上图可知,package1(包)和test.py(模块文件)位于同一级目录,package1(包)含有三个“模块文件”
各文件中具体的代码如下:
__init__.py为空文件夹,当然,想写点代码进去也行,但是对package1(包)中的文件进行导入时会先自动执行一遍__init__.py文件的代码
tets1.py文件的内容如下:
test2.py文件的内容如下:
入口文件举例说明:
比如说,我在编辑器(pycharm这些软件)中对上图中的test2.py点击运行,那么test2.py就是入口文件,如果在编辑器中对test.py点击运行,那么test.py就是入口文件
相对导入规则2(入口文件中不能使用相对导入)举例说明:
比如说在test.py文件中写入代码“from . import test2”,并对test.py文件点击“运行”按钮,则会显示如下报错,此时test.py是入口文件:
但是如果将test.py文件中的运行代码改成“from package1 import test2”代码就会顺利运行
同理,test2.py文件中的具体代码上面已经给出,从中不难发现,test2.py文件中含有相对导入,那么如果此时在编辑器中对test2.py点击“运行”,必然会报错,因为此时test2.py是入口文件
相对导入具体格式说明:
由上文中的规则3中可知"."表示当前目录,“..”表示上级目录,“...”表示上上级目录,以此文给出的文件结构进行举例:
在test2.py中编写代码,具体代码及含义如下
from . import test1表示将当前目录下(test2.py所在目录)的test1.py文件导入到test2.py文件中
from .test1 import a表示将当前目录下(test2.py所在目录)的test1.py中的函数a导入到test2.py文件中
对于仅使用“.”和“.+文件名”两种形式的区别大家一定要通过上面举的例子细品!!!
因为很多小伙伴在使用可能会写成:from .test2 improt test1这种形式,这是错的,一定要注意注意再注意!!!