python模块和包

一. 模块
  1.什么是模块
    1.有的功能开发者自己无法完成,这样的话需要借助已经实现的函数类来完成这些功能
    2.你实现不了的功能都由别人替你实现了
    3.别人写好的一组功能 文件夹/py文件/C语言编译好的一些编译文件
      分类 管理方法
      节省内存
      提供更多的功能
  2.为什么要有模块?
  分类 管理方法
  节省内存
  提供更多的功能
  3.模块的分类
    1.内置模块
      安装python解释器的时候跟着装上的方法
    2.第三方模块/扩展模块
      没有安装python解释器的时候安装的那些功能
    3.自定义模块
      自己写的功能如果是一个通用的功能, 就把它当做一个模块使用
  4.一个模块不会被重复导入
  5.模块的名字必须满足变量的命名规则, 一般情况下,模块名字都以小写字母开头
  6.所有的模块导入都应该尽量放在这个文件的开头
  7.模块导入也是有顺序的
    1.先导入内置模块
    2.再导入第三方模块
    3.最后导入自定义模块
  模块的导入:
    import 模块名
    from 模块名 import 名字  #(名字可以使方法名,类名,属性名)
      from .. import .. 中 import导入什么,就可以使用什么,未导入的不可以使用.例:导入类中的某一个方法,其他方法不导入则不可用.
      不导入并不意味着不存,而是没有建立文件到模块中其他名字的引用.
    当模块中导入的方法或者变量名与本文件中重名,name这个名字只代表最后一次对它赋值的那个方法或者变量.
    在本文件中对全局变量的修改是完全不会影响到模块的变量引用的
    from 模块名 import *  #模块中的__all__内容全部导入
      __all__ = ['','']   #[]内可添加可以被模块调用的名字
  模块重命名:
    from 模块名 import 名字 as 新名字
  __name__ :
    当前文件指的是__name__所在的文件
    执行的是当前文件,name就是__main__
    如果当前文件被导入,name就是自己的模块名字
  模块其他相关知识:
    把模块当成脚本运行 : 从本模块中反射本模块中的变量
    import sys
    getatter(sys.modules[__name__], '要反射的变量名')
  模块搜索路径 :
    模块在还没有导入之前是存在硬盘上面的
    自定义模块是否可以被导入需要看 : sys.path当中是否存在你要导入的文件的目录
  总结 :
    模块的搜索路径全部存储在sys.path列表中
    导入模块的顺序是从当前文件到调用的模块找到一个符合条件的模块就立即停止不再向后寻找
    如果要导入的模块和当前执行的文件同级: 直接导入即可
    不过不同级 : 需要把导入的模块的绝对路径添加到sys.path列表中
import sys
s= __file__.split('/')
ret = '/'.join(s[:-2])
sys.path.append(ret)


二. 包

  包就是 : 集合了一组py文件的文件夹,提供一组复杂的功能

  当提供的功能比较复杂,一个py文件写不下的时候会能使用包

  每一个包中至少会拥有一个__init__.py文件

  直接导入 :

    import 包.包 模块

    from 包.包 import 模块

  导入包如果希望导入包之后,模块能够正常的使用,那么需要自己去完成init文件的开发

  包中的模块的绝对导入

  包中模块的相对导入

    使用了相对导入的模块只能被当做模块执行,不能被当做脚本执行.




原文地址:https://www.cnblogs.com/dong-/p/9410354.html