0、声明,本篇只讨论空__init__.py文件的情况,不顾前提非得说__init__.py文件里面也可以写东西的不在此讨论了范围之内,重点是个"空"字。

1、很多地方的文件夹都有__init__.py。网上一般都说,有了这个东西会把它当作一个包,否则import这个文件夹会出错。

但这就好像和说python文件中如果有中文就要在开头写 # coding =utf8这句话一样,说话囫囵吞枣不带语境,导致误会新手。

2、实际上空的__init__.py文件在python3.3以上没有卵的必要。

如果用python3.3以上在__init__.py中写了内容,那要这个文件还差不多,否则来个空的__init__.py基本上是多此一举。就和在python3里面写# coding =utf8多此一举一样。

3、现在假设有这么一个目录,里面有:

一个名叫pac的文件夹(里面没有__init__.py文件)

一个pac.py的文件

一个run.py文件

在run.py里面写上 import pac,

3.1如果是python2,import pac实际上导入 的是pac.py,如果删除了pac.py那么就会报错,因为不能能import 一个文件夹,python2只能导入pac.py或者pac文件夹里面有__init__.py这种情况,类似的你写pac.txt  pac.ppt,写个import pac也是不能导入的,不认他。

3.2如果是python3,那么import pac情况不一样,import  pac到底导入的是个啥?

需要分很多种情况,一种是pac文件夹里面有__init__.py,一种是没有__init__.py,一种是连pac文件夹都没有,一种是你当前同级目录下还有一个叫pac.py的文件,一种是没这个pac.py的文件,这一下子就多了五种情况了。

3.2.1当写import pac时候,优先查找有没有pac文件夹里面有__init__.py的这个文件夹,如果找到了,那么此时的pac代表的是有__init__.py的pac文件夹(包)。

3.3.2如果3.2.1步骤没找到,那么再去查找有没有一个叫pac.py的文件,找到了那么 pac就代表pac.py了。

3.2.3如果连pac.py都没找到,就去找一个文件夹,这个文件夹不包含__init__.py,如果找到了这个文件夹,那么就会自动把这个文件夹当作包。

3.2.4如果执行3.2.3也没找到pac,那么就会报错了,ImportError: No module named pac

4.、总结一下,python2和python3的查找顺序差不多,但是python2少了3.2.3这一步,即在python2里面如果只有pac文件夹,你就import pac那就会报错。

有__init__.py的包,叫做Regular packages ,常规包,python2只支持这个。

没有__init__.py的包,叫做Namespace package,命名空间包,python3.3以上支持这种。

Namespace package这个东西是在pep420里面新增的。

https://docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-namespace-packages

https://www.python.org/dev/peps/pep-0420/

5、为了兼容python2和3,那就有必要写__init__.py;如果从不用python2,也不知道__init__.py里面然来可以写东西,只知道他是代表一个文件夹是一个包这一个作用的人,那就不需要有这个文件。

关于python 的空的__init__.py文件的作用,可不可以删除,到底有没有用?的更多相关文章

  1. Python学习笔记之__init__.py文件的作用

    参考地址:http://www.cnblogs.com/Lands-ljk/p/5880483.html Python __init__.py 作用详解 __init__.py 文件的作用是将文件夹变 ...

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

    转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...

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

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

  4. Python自定义Module中__init__.py文件介绍

    ./pyModuleTest/├── addutil│   ├── add.py│   ├── add.pyc│   ├── __init__.py│   ├── __init__.pyc│   └─ ...

  5. Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...

  6. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

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

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

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

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

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

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

随机推荐

  1. Aspose Linux下字体找不到报错

    http://www.aspose.com/docs/display/cellsnet/Smart+Markers http://www.aspose.com/docs/display/cellsja ...

  2. MSXML4 SP2 sp3安装时出错

    没有启动Windows Module Installer 服务或者windows installer服务,重启试试 Windows Installer Cleanup Tool清理早期的在选项框中找到 ...

  3. 性能测试-Gatling(一)

    背景说明转自 : http://www.infoq.com/cn/articles/new-generation-server-testing-tool-gatling/ 以前Jmeter用的多,如文 ...

  4. form表单target的用法

    偶然有一机会发现form表单的target的用法,可以实现当前页表单提交而不进行跳转刷新.代码如下,首页在页面里准备一form表单和一iframe <form action="提交的a ...

  5. SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing

    SAP 以工序为基准进行发料   这个流程是在业务有关需求,业务需要按照工序发料,一个工单有多个工序,而料是要发到每个工序上,而且没到工序之间在物理上是有距离的,所以仓管员在打印配发单之后希望了解到哪 ...

  6. C语言中的数组与字符串

    1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...

  7. Java如何设定二维数组的上限?

    在Java中,如何设定二维数组的上限? 以下示例中,使用arrayname.length来确定二维数组的上限(元素数目). package com.yiibai; public class Dimen ...

  8. The required Server component failed to start so Tomcat is unable to start问题解决

    问题出现: Server Tomcat v8.5 Server at localhost failed to start.  或者The required Server component faile ...

  9. C#或者.NET下的强制垃圾回收办法

    转载 2011年03月16日 17:21:00 标签: c# / .net / button / object / stream / class 8185 今天来谈谈C#的GC,也就是垃圾回收机制,非 ...

  10. (转)st(state-threads) coroutine和stack分析

     目录(?)[-] STACK分配 THREAD初始化栈 Thread启动和切换 Thread退出 Thread初始线程 Thread生命周期 st(state-threads) https://gi ...