一、在import模块的时候发生的事情
1、寻找模块
2、如果找到了,就开辟一块空间,执行这个模块
3、把这个模块中用到的名字都录到新开辟的空间中
4、创建一个变量来引用这个模块中
二、注意事项:
*1.模块不会被重复导入
*2.模块和文件之间的内存空间始终是隔离的
*3.模块的名字必须是符合变量命名规范的
简单模块导入实例:
import my_module # my_module.read2() # name = 'alex' # my_module.read2() # in read2 youhongliang my_module.name = 'alex' my_module.read2() # in read2 alex
三、导入多个模块
3.1 注意事项:
1、pep8规范
# import os
# import time
# import my_module
# 内置,第三方,自定义
2、排列顺序
# import os
# import django
# import my_module
3.2 给模块起别名
import my_module as m m.read2() # in read2 youhongliang # 起别名之后,原来的名字就不能用了
起别名的应用
def dump(method): # (繁琐版) if method == 'json': import json with open('file','w') as f: json.dump([1,2,3],f) elif method == 'pickle': import pickle with open('file', 'w') as f: pickle.dump([1, 2, 3], f)
简化版
def dump(method): if method == 'json': # (简化版) import json as m elif method == 'pickle': import pickle as m with open('file', 'w') as f: m.dump([1, 2, 3], f)
3.3 模块搜索路径
import sys print(sys.path) import my_module
注意:
正常的sys.path中除了内置、扩展模块所在的路径之外
只有一个路径是永远不会出问题
你直接执行的这个文件所在的目录
一个模块是否被导入,就看这个模块所在的目录在不在sys.path中
如果我们在同级目录中添加一个文件件,然后在这个文件夹中添加一个模块。
直接: import my_module2 (报错) # ModuleNotFoundError
做一步处理:
import sys sys.path.append('D:骑士计划第五周Day26glance') import my_module2
四、两种运行一个py文件的方式
4.1 直接运行它 : cmd python xx.py(文件) pycharm 脚本
脚本运行时 __name__ == '__main__'
# 导入它 : 模块
# 模块运行:__name__ == '模块名'
4.2 语法讲解:
在模块调用中,如果只想脚本中使用的,只需要用这个语法
if __name__ == '__main__': # 作为模块时,不该有的东西放在这里 print('in my_module2') # 重要语法 print(__name__) # 函数调用
五、模块 from ** import
from my_module import name print(name) # youhongliang from my_module import read2 read2() # in read2 youhongliang
5.1 在from import 的过程中发生了什么事儿
1、要找到my_module
2、开空间,执行my_module
3、所有的my_module中的名字都存储在my_module所属的空间中
4、建立一个引用name,read2分别取引用my_module空间中的名字
from my_module import name from my_module import read2 # in mymodule 执行一次
区别:
name = 'alex' from my_module import name print(name) # youhongliang # name = 'alex' from my_module import name name = 'alex' # 直接覆盖 print(name) # alex
小技巧:
from my_module import name,read1,read2 # 可以写多个 from my_module import name as n,read1 as r1,read2 as r2 # 同时起别名
5.2 * 与__all__
from my_module import * # 指模块里的所有变量 print(name) #youhongliang read1() # in read1 read2() # in read2 youhongliang 脚本中: __all__ =['name','read1'] # 只有这两个可以调用