模块01

模块

  模块就是一系列功能的集合体

  模块的三种来源

  1 内置模块

  2 第三方模块

  3 自定义模块

  模块的格式

  1 使用python编写的.py文件

  2 已经编译为共享库或DLL的C或C++扩展

  3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹别称之为包)

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

 

  为什么用模块

  1 使用内置的或第三方的模块的好处是:拿来主义,可以极大提升开发效率

  2 使用自定义模块的好处是:可以减少代码冗余

 

  使用模块

    大前提:一定要区分开谁是执行文件,谁是被导入模块

  import

   文件名是xxx.py  模块名是xxx

  首次导入模块

  会产生一个模块的名称空间

  执行文件xxx.py,将执行过程中产生的名字都放到模块的名称空间中

  在当前执行文件的名称空间中拿到一个模块名,该名字指向模块的名称空间

 

  多次导入都是直接引用第一次导入的成果,不会重新执行文件

  执行文件中访问模块名称空间名字的语法:模块名.名字

  指名道姓的要名字不会和当前执行文件的名字冲突

  总结

  优点:指名道姓的向一个名称空间要名字,肯定不会与当前名称空间中的名字冲突

  缺点:但凡应用模块中的名字都需要加前缀,不够简洁

  一行导入多个

  可以为模块起别名

 

  from ... import

  首次导入模块

  创建一个模块的名称空间

  执行文件,将执行过程中产生的名字都放到模块的名称空间中

  在当前执行文件中直接拿到一个名字,该名字就是执行模块中相对应的名字

  总结

  优点:使用时无需加前缀,更简洁

  缺点:容易与当前名称空间中的名字冲突

 

模块路径

  模块搜索路径的优先级

  1 内存中已经加载过的

  2 内置模块

  3 sys.path # 第一个值是当前执行文件所在的文件夹

  

  导入其他文件中的模块

  sys.path(r'文件路径')

  from 文件名 import 模块名

 

  环境变量是以当前执行文件为准的

  强调:所有被导入的模块参照环境变量sys.path都是以执行文件为准的

  所有被导入的模块再去导入其他模块,参照的都是执行文件的sys.path

  

  包

  本质就是文件夹

  函数可以使得同一给文件中代码结构更清晰

  模块都是以文件形式来组织代码结构

  如果文件越来越多管理起来也不方便,所以需要使用文件夹来管理

  包的使用

  新建一个文件夹就是一个包

  包和文件夹仅有一个区别就是包中应该包含一个__init__.py文件

 

  __init__.py文件的作用

  包也是模块

  在导入一个模块时发生三件事都一样

  问题是第二步需要执行被导入文件的代码,包只是个文件夹不能直接执行,

  所以需要提供一个py文件用来代表这个包成为一个模块

  init是初始化单词的缩写,表示对包中的内容进行初始化

  包的初始化其实就是导入这个包中所有其他模块

  总结:导入包时本质就是在导入包下的__init__.py文件

  注意:init文件的作用仅仅时导入包内模块,提供给外界使用,不应该在里面写逻辑代码

  init在python2中要求必须有,在python3中式可选的

  如果没有提供init文件,在使用模块时就直接使用文件夹点需要的模块名称

  init的好处

  可以将包内模块的功能直接导入到init文件中

  这样对对于包的使用者可以无需考虑要使用的功能在哪个文件中,直接调用功能即可

 

  使用包的流程

  1 创建一个包

  2 编写包内部的模块代码

  3 写完后打开init文件,将需要提供给外界使用的模块导入其中(可以省略)

 

  相对导入和绝对导入

  相对导入指的时对某个模块而言的导入路径

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

  绝对导入指的时从执行文件开始的绝对路径,注意不是文件的酒店路径

 

  导入时需要注意

  1 import 导入时,点的后面必须时一个模块或包名

  2 form 导入式 import 后面不能出现点

posted @ 2019-01-21 15:38  linchengcheng  阅读(94)  评论(0编辑  收藏  举报