zoukankan      html  css  js  c++  java
  • 关于python 的空的__init__.py文件的作用,可不可以删除,到底有没有用?

    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里面然来可以写东西,只知道他是代表一个文件夹是一个包这一个作用的人,那就不需要有这个文件。

  • 相关阅读:
    SAP training scope SAP从入门到精通课程体系
    萨提亚·纳德拉
    说说为什么不再写博客了
    课上用过的Linux命令
    中国商用密码生产企业和商用密码产品及标准
    在Python中运行gmssl
    基于CMPP协议集成短信测试桩全流程实践分享 做梦的人
    mysqlslap: Error when connecting to server: 1064 Reach limit of connections 做梦的人
    大数据清洗表中没有找到对应表 做梦的人
    自动生成镜像,在上传到仓库 做梦的人
  • 原文地址:https://www.cnblogs.com/ydf0509/p/9279937.html
Copyright © 2011-2022 走看看