模块
什么是模块(一个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__