加载模块:

  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  #绝对路径,直观但无法移动包