Day15模块(导入,使用)
Day15模块
什么是模块:
一系列功能的集合体
一个py文件就是一个模块
aaa.py就是aaa模块
模块四种形式:
内置的模块
py文件
第三方的
包
模块三种来源:内置的,第三方,自定义
为什么要用模块
1.使用内置的或者第三方的好处是拿来主义,极大提升开发效率
2.使用自定义模块的好处是,将程序各部分组件共用的功能提取出来放到一个模块内,其他组件通过导入使用,减少代码冗余
如何用模块(py文件):
首次导入模块
1.产生一个模块的名称空间
2.执行模块内代码,将产生的名字放入模块的名称空间内
3.在当前执行文件中拿到模块名字,名字指向模块的名称空间
之后的导入直接引用首次导入的成果
使用
模块名.(变量or函数名)
补充:
import spam as sm
模块名纯小写加下划线
模块名不能以数字开头,避免中文定义模块名
import spam 与 from spam import read区别
首次导入前两步与import导入一样,第三步不一样,在当前执行文件中拿到名字money,该名字指向模块的名称空间中的money
money如果是不可变类型,在模块中改变这个money,不会影响执行文件中的money
如果是可变类型,在模块中改变这个money,执行文件中的money会随之改变
import 总结
优点:引用模块中的名字必须加前缀(模块名.),指名道姓的问某一个名称空间要名字,不会与当前执行文件名称空间冲突
缺点:不够简洁
from ..import
优点,引用模块中的名字不用加前缀,使用更为简洁
缺点:容易与当前执行文件名称空间中的名字冲突
from .. import * 代表所有名字调用
最好不要用
__all__ = ["name"]
import *时只能引用all设置的名称
模块的查找顺序
1.内存
2.内置模块
3.sys.path(执行文件为准)
pycharm为了识别目录结构,它把项目根文件夹放入环境变量
所以执行文件的环境变量导入后,其他模块导入的时候就不用
if __name__ == "__main__"
当文件被当做执行文件直接运行时,__name__等于__main
当文件被当做模块导入时,__name__为模块名
应该把项目的根目录加到环境变量里
应该把项目的根目录所在绝对路径拿到,然后加到环境变量里
import os
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
把启动文件直接放在根目录下,可以避免更新环境变量和模块导入时找不到模块的问题(前提是采用from文件夹名导入模块)