一,模块的介绍
模块就是一些功能的集合。如何自己写一个模块创建一个py文件,给它起一个 符合变量名命名规则的名字,这个名字就是模块名。
二,导入模块的过程
- 找到这个模块
- 判断这个模块是否被导入过了
- 如果没有被导入过
- 创建一个属于这个模块的命名空间
- 执行这个模块中的代码
- 让模块的名字 指向 这个空间
三,给模块起别名
起别名之后可以简化一些代码量。
改进前:
1 def func(dic,t = 'json'): 2 if t == 'json': 3 import json 4 return json.dumps(dic) 5 elif t == 'pickle': 6 import pickle 7 return pickle.dumps(dic)
改进后:
1 def func(dic, t='json'): 2 if t == 'json': 3 import json as aaa 4 elif t == 'pickle': 5 import pickle as aaa 6 return aaa.dumps(dic)
四,导入多个模块
- 建议导入模块时,一行一行的导入。
-
规范建议 模块应该一个一个的导入 : 自定义模块,第三方模块,内置模块(已经是约定成俗的东西了。)
1 内置模块 2 扩展(第三方)模块 3 自定义模块 4 5 import os 6 7 import django 8 9 import my_module
五,from import
form import可以导入模块的个别功能,不用一下子都导入。
导入过程:
-
找到要被导入的模块
- 判断这个模块是否被导入过
- 如果这个模块没被导入过
-
创建一个属于这个模块的命名空间(如果已经导入的话直接跳过)
-
执行这个文件(如果已经导入的话,直接跳过)
-
找到你要导入的变量
-
给你要导入的变量创建一个引用,指向要导入的变量
导入多个模块的名字
from my_module import read1,read2 read1() read2()
给导入的起别名
1 from my_module import read1,read2 2 read1() 3 read2()
六,from my_module import *
此时,会导入模块所有的功能,并且名字也一块导入。
* 和 __all__ __all__能够约束*导入的变量的内容
__all__ ,会以列表的形式越是*的导入量。
七,模块的循环引用问题
尽量不要形成a引用b的同时b引用a,容易报错。
八,模块的加载与修改
如果导入一个模块后,导入的模块内容会引入你的内存之中。这样的话,如果这时候改变你的模块的话,不会改变到内存之中。
可以引用importlib模块,达到更新内存的效果。
1 import time,importlib 2 import aa 3 4 time.sleep(20) 5 # importlib.reload(aa) #更新内存。 6 aa.func1()