zoukankan      html  css  js  c++  java
  • python基础--模块的查找顺序以及相对导入和绝对导入

    模块:模块是一系列功能的结合体

        模块的来源:

            内置的模块(python解释器自带的)

            第三方(开发者编写的模块)

            自定义的模块(自己编写的模块)

        模块的四种表现形式:

            1、使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)

            2、已被编译为共享库或DLL的C或C++扩展(了解)

            3、把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py的文件,该文件夹被称之为包)   包:是一系列py文件的结合体

            4、使用C编写并连接到python解释器的内置模块

        为什么要使用模块:

            1、用别人写好了的模块(内置的或是第三方的);典型的拿来主义,提高了开发的效率

            2、使用自己写的模块(自定义的);当程序比较庞大的时候,你的项目不可能只在一个py文件中,那么当多个文件中都需要使用相同方法的时候,可以将该公共方法写到一个py文件中。(当其他的文件要调用了就可以直接以模块的形式导入过去了)

        注意点:导入的时候一定要区分哪个是执行文件,哪个是被导入的文件。

     import导入:

        导入的三个步骤:

            1、运行执行文件

            2、运行文件中的代码,将产生的名字和值存放到当前文件的名称空间中

            3、在执行文件中产生一个指向名称空间的名字

        import导入:访问模块名称空间中的名字统一使用:模块名.名字

            只有当几个模块有相同部分的时候或者属于同一个模块,可以使用一次性导入,要是几个模块没有联系的话,应该分多次导入。ps:模块的导入的句式应该是在文件的开头,当文件名字比较复杂的时候,应该学会使用as给当前模块区别名。

        

    from ... import ...导入:

        导入的三个步骤:

            1、运行执行文件

            2、执行文件中的代码,将产生的名字和值对应的放到文件的的名称空间中

            3、最后直接拿到指向被导入模块中的某个值

        缺点:

            1、访问的模块中名字不需要加模块名的前缀

            2、在访问模块中的名字可能会与当前执行文件中的名字冲突

        补充:

            可以使用*一次性将模块中的名字全部加载过来,但是不推荐使用这种方式,因为一些模块中方法太多太多了,你根本不知道到底哪些名字可以使用。

            __all__:可以指定所在py文件中被当作导入的时候可以限制导入者能够拿到的名字个数。

    循环导入问题的解决思路:

        如果出现这种问题那么一定是你的程序设计不合理,这种问题应该在程序设计阶段就应该避免。

        问题解决方式:

            方式一:将循环导入的句式写在文件的最下方

            方式二:函数内导入模块

        

    __name__的用法:当

        文件被当作执行文件的时候__name__打印的结果是__main__

        当文件被当作模块导入的时候__name__打印的结果是模块名(没有后缀名)

    模块的查找顺序:

        查找顺序:

            1、先从内存找  2、内置中找 3、sys.path中找(环境变量)一定要分清楚谁是执行文件谁是被导入文件

            sys返回的是一个列表,里面放了一些文件的路径,但是第一个路径永远是文件所在的文件夹

        注意:py文件的文件名不应该与模块名(内置的、第三方的)冲突

    模块的绝对导入:

        绝对导入必须依据执行文件所在的文件夹路径为准

            绝对导入无论在执行文件中还是被导入文件中都是适用的

    想对导入:

        .表示的是当前路径

        ..表示的是上一级路径

        ...表示的是上上一级路径

    注意:

        相对导入不能再执行文件中使用

        相对导入只能在被导入的模块中使用,使用相对导入,就不需要考虑执行文件到底是谁了,只需要直到模块与模块之间路径的关系

  • 相关阅读:
    文档驱动开发模式在 AIMS 中的应用与实践
    软件“美不美”,UI测试一下就知道
    做运维,送你7个常用的服务器资源监控工具
    掌握ROMA Compose,报表清单不秃头
    技术干货丨隐私保护下的迁移算法
    业务爆发式增长,音视频服务如何做好质量监控与优化?
    MyBatis中SQL语句优化小结
    Go语言微服务开发框架:Go chassis
    揭开KPI异常检测顶级AI模型面纱
    激光雷达lidar与点云数据
  • 原文地址:https://www.cnblogs.com/tulintao/p/11196893.html
Copyright © 2011-2022 走看看