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这一步,即如果只有pac文件夹,你就import pac那就会报错。

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

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

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

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

希望本文所述对大家程序设计有所帮助。

python中__init__文件的运用_python中__init__.py文件的作用相关推荐

  1. cmd执行python 环境变量应该怎么写_python怎么运行py文件?.py文件cmd命令方法及环境变量配置教程...

    python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写.python在生物信息.统计.网页制作.计算等多个领域都体现出了强大的功能.python和其他脚本语言如java.R ...

  2. python撤回上一条命令_python 中执行上一句话,请教问题,怎么也才能使python执行完上一个命令,再执行下一条语句...

    请教问题,怎么也才能使python执行完上一个命令,再执行下一条语句 正常的批处理文件执行完毕就2113会自动退出,连exit都不5261需要. 你是不是看见执行时4102窗口光标一闪一闪或者闪都不闪 ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. python中模块是什么意思_Python中的模块是什么

    一.python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include 引入math.h这个头文件,否则是无法正常进行调用的. 那么在Python中,如果 ...

  6. python文件打开后闪退_困扰已久的问题--python文件打开方式?为什么打开py文件会闪退!...

    困扰已久的问题--python文件打开方式?为什么打开py文件会闪退! 当你安装好python时,你能够在python环境下写语句. python环境有两种措施敞开:第一种措施是找到并敞开python ...

  7. python的init有什么用_Python中 __init__.py的作用

    我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 标识该目录是一个python的模块包(module package ...

  8. python中的文件怎么处理_python 中有关文件处理

    Python的文件处理 打开文件f = open ("path","mode") r 模式 以读的方式打开,定位到文件开头 , 默认的 mode.文件不存在直接 ...

  9. python中的main函数可以被其他文件调用么_Python中在脚本中引用其他文件函数的实现方法...

    在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和 ...

最新文章

  1. 解密 Redis 助力双 11 背后电商秒杀系统
  2. Docker火遍全球!Docker(Inc)这家公司却要死了???
  3. SpringMVC @RequestBody 接收Json数组对象
  4. 【分布式】分布式事务解决方案概述
  5. 计算机义务维修队,我院捷诚义务维修服务队电脑维修服务活动
  6. 推论统计学基础一:Estimation
  7. vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點
  8. Tomcat 详解 一
  9. css绘制正方体_设计师仅使用CSS绘制了8个标志性X战警
  10. 【mmall】IDEA自动Make
  11. Tomcat无需输入项目名,直接用域名访问项目
  12. MySQL HandlerSocket插件 资料
  13. ios和android安全对比
  14. mysqldump备份过程中都干了些什么
  15. 【Java】ResourceBundle 使用
  16. 一起学爬虫(Python) — 01
  17. 运行Android项目时,报Installation failed due to invalid APK file!错误的解决办法
  18. upnp是不是虚拟服务器,360路由器虚拟服务器设置(360路由器开启upnp功能)
  19. Windows 10 Conda 更换清华大学的镜像源
  20. (软件构造) 关于JDK版本更换问题(附jdk下载链接以及jdk环境变量全教程)

热门文章

  1. Libevent源码分析
  2. MaxCompute full outer join改写left anti join实践
  3. Istio 网关之南北向流量管理
  4. Serverless 工作流给人工智能带来了哪些变化?
  5. Kubernetes 和 Docker,到底什么关系?
  6. 盘点丨2019十大边缘计算项目
  7. 5G 比 4G 快,不只是因为......
  8. 漫画:五分钟看懂车联网
  9. 这项技术:华为、BAT要力捧!程序员:我彻底慌了... ​
  10. 只了解View的事件分发是不够的,来看下输入系统对事件的处理