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

    模块的来源:

        内置的模块(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文件的文件名不应该与模块名(内置的、第三方的)冲突

模块的绝对导入:

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

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

想对导入:

    .表示的是当前路径

    ..表示的是上一级路径

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

注意:

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

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

python基础--模块的查找顺序以及相对导入和绝对导入的更多相关文章

  1. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  2. python基础----模块、包

    一 模块                                                                                                 ...

  3. Python基础-模块与包

    一.如何使用模块 上篇文章已经简单介绍了模块及模块的优点,这里着重整理一下模块的使用细节. 1. import 示例文件:spam.py,文件名spam.py,模块名spam #spam.py pri ...

  4. python基础——模块

    python基础——模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  5. Python引用模块和查找模块路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...

  6. Python基础+模块、异常

    date:2018414+2018415 day1+2 一.python基础 #coding=utf-8 #注释 #算数运算 +(加)  -(减)  *(乘)  /(除)  //(取整)  %(取余) ...

  7. Python入门之Python引用模块和查找模块路径

    #这篇文章主要介绍了Python引用模块和Python查找模块路径的相关资料,需要的朋友可以参考下 模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的, ...

  8. python—命名空间、作用域查找顺序、闭包

    名称空间 name space,如下图: x = 1, 1存放在内存中,1 会有一个内存地址,x 则 存放在 name space 里,并同时记录了 1的内存地址, 即 名称空间是存放了变量x与1绑定 ...

  9. python27期day15:自定义模块、模块导入、模块的路径、模块的查找顺序、time、datetime、random、os、sys、作业题

    1.模块的介绍: py文件就是一个模块 2.模块的分类:内置模块:python标准库 200 第三方模块 自定义模块 3.为什么学习模块? 开发效率高,内置函数和模块 减少重复代码,分文件管理,有助于 ...

随机推荐

  1. 两个datagrid的数据移动(支持多选)

    1.需求 :点击卸车和撤销按钮可以实现 1和2 之间数据的移动(支持多选) 2. 代码 (这里只写一个撤销的功能) //撤销按钮 function moveOut() { var item = $(' ...

  2. 工作中遇到的bug

    1. Error: No PostCSS Config found in.. 在项目根目录新建postcss.config.js文件,并对postcss进行配置: module.exports = { ...

  3. csps模拟测试74梦境,玩具,飘雪圣域题解

    题面:https://www.cnblogs.com/Juve/articles/11679226.html 梦境: 其实还是挺水的,排序错了过不了样例,打了个二分图匹配就跑了 #include< ...

  4. 线段树分治初步学习&洛谷P5227[AHOI2013]连通图

    线段树分治 其实思想说起来是比较简单的,我们把这个题里的所有操作(比如连边删边查询balabala)全部拍到一棵线段树上,然后对着整棵树dfs一下求解答案,顺便把操作做一下,回溯的时候撤销一下即可.虽 ...

  5. jeecms 代码生成 Tools

    本文作者: IIsKei 本文链接: http://www.iskei.cn/posts/50510.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议 ...

  6. Ubuntu下U盘能看见盘符但打不开

    查看U盘状态 sudo fdisk -l 格式化 sudo mkfs -t vfat -I /dev/sdb1 sudo mkfs -t ntfs -I /dev/sdb1 sudo mkfs -t ...

  7. 目标检测从入门到精通—SPP-Net详细解析(三)

    SPP-Net网络结构分析 Author:Mr. Sun Date:2019.03.18 Loacation: DaLian university of technology 论文名称:<Spa ...

  8. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  9. scanf读入有空格字符串

    当不支持gets时,getline又比较慢,可以使用scarf("%[^\n]s", str);来读入以换行表示读完的字符串,其中[^char]表示以char为结束.

  10. NOIP2016提高A组 B题 【HDU3072】【JZOJ4686】通讯

    题目描述 “这一切都是命运石之门的选择.” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了掌握时间机器的技术,SERN总部 ...