加载模块:
1.先从sys.modules里查看是否已导入
2.如果没有导入,就依据sys.path路径寻找模块
3.找到模块就导入
4.创建这个模块的命名空间
5.执行文件,把文件中的名字放到命名空间里
执行demo.read会优先查找demo里的变量
import time as t #给模块起别名,原名不再可用
if file_format == 'xml':
import xmlreader as reader
elif file_format == 'csv':
import csvreader as reader
data = reader.read_data(filename) #xmlreader和csvreader里都有read_data函数
导入顺序:内置模块->扩展模块(比如django)->自定义模块
模块导入尽量往上写
from time inport sleep #单独从某个模块导入变量(省内存),如果函数里定义同名的,导入进来的会被覆盖
sleep()
from demo import money,read #也可以as xx
print(money) #100
read() #100
money = 200
read() #100(函数指向的是内存地址)
from demo import * #导入所有变量,容易同名冲突
__all__ = ['money','read','read2'] #模块开头得有这个对应*
if __name__ == '__main__' #写在模块中用于测试
from . import api #相对路径,可以移动包,只要找到包的位置就可以调用包里的模块
#包里模块如果想调用其他模块只能用相对路径,而且包内不能直接执行文件
from dir import.api #绝对路径,直观但无法移动包