模块详解以及import本质
- 定义:
模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)
- 导入方法
同一目录下的导入
improt *
name = "alex" def sayhello(): print("hello in module_test1") def logger(): print("logger in module_test")
import module_test1 a = module_test1.name print(a) module_test1.logger()
from module_test1 import logger ,name
from . import logger 从当前路径导入logger,.代表当前路径
main.py
from module_test1 import logger ,name print(name) logger()
from module_test1 import logger as module_logger ,name as module_name
from module_test1 import logger as module_logger ,name as module_name print(module_name) module_logger()
import本质(路径搜索和搜索路径):导入模块的本质就是把python文件解释一遍
包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)
导入包的本质就是执行该报下的__init__.py文件
不同目录下的导入:
main.py 导入module1下文件module_test2.py
import os,sys ''' __file__:代表当前文件 os.path.abspath:获取绝对路径 os.path.dirname:获取当前目录 ''' a = os.path.abspath(__file__)#获取当前文件所在的绝对路径 print(a) b = os.path.dirname(a)#获取当前文件所在的目录 print(b) c = os.path.dirname(b)#获取当前文件所在目录的上一级目录 print(c) #合写: d = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) print(d) #sys.path是寻找导入文件所在路径的列表,一般从左到右寻找 path = sys.path print(path) e = "%s\module1"%d sys.path.append(e)#将上一级目录加入到列表里,才能导入该目录下的其他文件,append是加到列表最后,这里也能使用insert插入到第一个位置 import module_test2 module_test2.logger()
- 导入优化
import module_test1 #每次调用都需要花费时间去查找对应位置 module_test1.sayhello() module_test1.logger()
#只查找一次,使用多次的时候能够减少花费时间 from module_test1 import sayhello sayhello()
- 模块的分类:
- 标准库
- 开元模块
- 自定义模块