基本概念
先上结论
举例解释
实验一:不包含__init__.py
实验二:A中包含__init__.py
实验三:A.A_A中也包含__init__.py
进阶
基本概念
概念 解释
import 即导入,方式就是在import位置将代码文件拷贝过去。
模块 python中一个.py文件就是一个模块
包 指软件包,举例import matplotlib.pyplot中(其中pyplot非函数,至少是一个模块或者包),matplotlib就是一个软件包。
先上结论
__init__.py的作用是让一个呈结构化分布(以文件夹形式组织)的代码文件夹变成可以被导入import的软件包。

举例解释
为了形象地解释,我建立了一个test文件夹,其中一个文件夹A打算建立成一个软件包,然后尝试在B文件夹的的run.py文件下导入A包中的模块。

实验一:不包含__init__.py
test文件夹中包含的文件如下:

此时如果在B/run.py中运行以下语句的结果为:

语句 运行结果
import A ImportError: No module named A
import A.A_A ImportError: No module named A.A_A
import A.A_B ImportError: No module named A.A_B
结论:此时A并不能被当成是一个软件包。

实验二:A中包含__init__.py
A文件夹下包含__init__.py,test文件夹结构变为如下:

在B/run.py中运行以下语句的结果依次列在表中:

语句 运行结果
import A 成功
import A.A_A ImportError: No module named A_A
import A.A_B 成功
结论:由A.A_B能被成功import看出此时A已经是一个软件包,因为A下的.py文件已经能够程序识别出来。但是由于A下的A_A还不是一个软件包,所以A.A_A还不能被导入。

实验三:A.A_A中也包含__init__.py
A文件夹及其子文件夹下都包含__init__.py,test文件夹结构变为如下:

在B/run.py中运行以下语句的结果依次为:

语句 运行结果
import A.A_B 成功
import A.A_A 成功
import A.A_A.A_A_A 成功
结论:此时A及其子文件夹A_A都成功变成软件包,其中的模块可以被任意导入。

进阶
在上述实验中,发现导入A时并未将其下的子模块自动导入,当__init__.py文件不为空时,其中可以填写from . import A_A类似语句实现自动子模块导入。

不含有__init__.py的包也可以当作命名空间包使用,使命名一致的包被统一管理。

参考链接:https://blog.csdn.net/yucicheung/article/details/79445350

python模块中__init__.py的作用的更多相关文章

  1. python包中__init__.py的作用

    1.__init__.py定义包的属性和方法 一般为空文件,但是必须存在,没有__init__.py表明他所在的目录只是目录不是包 2.导入包的时候使用 例如有一个test目录,test下有xx1.p ...

  2. Python包中 __init__.py文件的作用

    原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...

  3. python包中__init__.py文件的作用

    python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...

  4. Python包中__init__.py作用

    在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中的目录结 ...

  5. python中__init__.py的作用、module和package

    控制包的导入行为: 1.声明当前文件是一个可导入的包: 2.如果当下包下有多个.py文件使用__ all__ = [ '模块名'],也就是form XXX import YYY module和pack ...

  6. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  7. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  8. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

  9. python中__init__.py与def __init__(self)的使用

    一直对__init__的使用很迷茫,这里系统的学习了解下 1.__init__.py文件-package的标识 python中每个package实际上是一个目录(Directory),程序运行时如何识 ...

随机推荐

  1. 结合模板导出PDF文件

    @Action("report_exportJasperPdf")    public String exportJasperPdf() throws Exception{     ...

  2. WIN7U X64环境下的SQL SERVER 2008R2的防火墙配置

    测试需要,备忘. CMD下运行,可以把sql server 要用的端口都开好. netsh advfirewall firewall add rule name = SQLPort dir = in ...

  3. saleae逻辑分析仪-串口

    安装软件 下载:https://www.saleae.com 连线 逻辑分析仪CHx分别连接UART的rx和tx 配置Logic 选择串口 设置波特率 还可以自定义显示方式 打开串口助手 波特率和Lo ...

  4. 原子性atomic/nonatomic

    原子性:并发编程中确保其操作具备整体性,系统其它部分无法观察到中间步骤,只能看到操作前后的结果. 决定编译器生成的getter和setter是否原子(natomic)操作.   i 因此,atomic ...

  5. SQL统计部门人数,人数为0的部门也要显示出来

    相同点:它们都以一张部门表(或类别表),其它表都有部门编号DepartmentID(类别编号) 案例一:一张表 select c.DepartmentID,c.DepartmentName, t.Nu ...

  6. 【kafka】安装部署kafka集群(kafka版本:kafka_2.12-2.3.0)

    3.2.1 下载kafka并安装kafka_2.12-2.3.0.tgz tar -zxvf kafka_2.12-2.3.0.tgz 3.2.2 配置kafka集群 在config/server.p ...

  7. Python——函数&作用域

    我们前面学的都是面向过程式的编程(代码从上到下写,并运行),而函数式编程是将繁杂的代码通过整理特性进行规整.像图书馆一样,将小说.教学.外文等书籍进行分类.让编程人员或看代码人员很容易的查看该段代码的 ...

  8. mybatis的XML中注释需谨慎

    报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...

  9. zabbix监控内存

    取内存百分比 取出内存的可用的MB大小 / 总的内存大小 = 实际可用的百分比 avilable 710 X 100 / total 974 free -m|awk '/^Mem/{print $NF ...

  10. 在DEV c++ 中如何设置默认的代码模板

    /*菜单,工具=>编辑器选项(弹出对话框)=>代码(属性页)=>缺省源(属性页),写入一些代码确定即可(勾选“向项目初始源文件插入代码”).版本是5.11,中文版 */ #inclu ...