python--模块与包

模块 

什么是模块(一个PY文件)
  自己写的模块就是py文件  import的同时就是执行这个模块的里面的代码
  里面用def写了函数的话  模块.函数名  就是执行了这个函数
  同一个模块不会被重复导入
  导入模块的顺序:内置、需要安装的扩展模块、自己写的模块
  导入模块的规则:模块有自己的命名空间
  import  模块名  as  要改的名
  from 模块名 import方法名 as  要改的方法名,方法名  as 要改的方法名
  可以多个导入
  模块与模块之间也可以相互用,比如自己的模块里面导入了math模块里面的pi
  那么引用自己的模块的时候,也可以引用math模块中的pi
  __all__=[] 如果有这个,只有中括号里面的名字的方法才能被
  from 模块名 import*调用   *和__all__相通的
  sys.modules 当前文件引用的所有模块
  '' in sys.modules  判断是字符中的模块是否在当前引用的模块中
  import importlib   reload  可以实时在程序运行时修改模块内容
  pyc文件是一个编译文件,在import模块的时候自动生成,导入模块的时候会快 
  import sys
  print(sys.path)  所有导模块的顺序,如果内容少东西影响导模块
  第三方模块放在  site-packages中
  模块中 print(__name__)是__main__如果是别的导入这个模块的话,输出的是模块的名字
  所以可以用这一点做判断,用模块做脚本的时候,可以用这个值为__main__做判断
  如果模块做脚本的话都要加上  if __name__==‘__main__'这句话
  dir(内置函数)查看某一个模块的名字或者内置函数的名字

包 

里面有__init__的文件夹就是包
  要导入包里面的模块
  from glance.api import policy
  policy.get()
  例如↑
  from  文件目录  impor 前面文件目录下的模块
  方法调用
  也可以多个导入
  如果用了  .  这种相对路径的导入 .是当前目录  ..是上层目录
  对于别人写好的包,直接用就行
  如果自己写包:
    如果模块与模块之间没什么联系,就不用操心绝对路径相对路径
 如果包的模块之间存在引用关系:
    绝对路径的导入:导入的路径要随着包与文件关系的变化而发生位置改变
                    优势在包内部和包外部都可以执行
    相对路径的导入:一次写好的模块的导入关系,不需要关心模块和文件之间的关系和位置变化
                    在外部没问题,在内部有问题
        只能在包外面执行
  __init__肯定是先要执行的   直接 from glance import api  这样的话导入这个文件夹就先执行__init__

原文地址:https://www.cnblogs.com/gaoshengyue/p/7570088.html