1. 模块的简介
python语言:调包侠
1.什么是模块?
模块就是一系列功能的集合,模块中就是提前写好了很多功能,直接拿来使用
2.为什么要用模块?
站在巨人的肩膀上,别人写好噩一些功能我们把它下载下来直接用在我们的项目中,大大提高开发效率
3.模块的分类
1.内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
2.第三方的(别人写好的模块,人家放在网上,去网上下载)
3.自定义的(我们自己写的模块)
4.模块的存在形式
# 一共有4中,只需要掌握两种
1.我们自己写的python代码(.py文件)
2.包的形式:就是一系列py文件的组合(文件夹)
# 文件夹内部有一个__init__.py文件
2. 模块的导入方式之import句式
import 模块名 # 导入模块时,只写模块名字,不要写后缀名
'''
运行当前文件,会导入md文件到此文件中,并且会执行导入文件
导入文件多次,那么,也只会执行一次导入文件中的代码,只需要导入一次即可
'''
'''
导入文件的时候发生了什么事?
1.首先会运行执行文件,产生执行文件的全局名称空间
2.运行导入文件
3.会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
4.会执行文件中产生一个名字md指向导入文件的名称空间
'''
如何使用导入模块?
# 直接使用模块名点变量名,直接使用
3.from...import...句式
from md import money,read1,read2,change
'''
from...import...句式
导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
导入文件的时候发生了什么事?
1.首先会运行执行文件,产生执行文件的全局名称空间
2.运行导入文件md
3.会产生导入文件的全局名称空间,把导入文件中名字都丢到全局名称空间中
4.还在执行文件中产生一个名字money指向导入文件的名称空间中得money
如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入名字一样的时候)
# 出现冲突的时候谁近就用谁
# 一般情况,所有的导入语句都写在文件开头
'''
4.导入语句的其它用法
1.起别名:使用 as
for md import read as tt
import md as ee
2.连续导入
import time
import md
import sys
import time,md,sys
3.通用导入
from sys import *
5.循环导入
# 在编码过程中,循环导入是不能允许出现的
如果出现循环导入,请及时更正
6.判断文件类型(执行文件、导入文件)
if __name__=='__main__':
read()
if __name__=='__main__':
'''
在这个判断里面写的代码,只是以执行文件运行的时候,才会被执行,当被导入文件的时候,不会被运行
'''
7.名字的查找顺序
'''
1.先从内存中查找
2.再从内置模块中查找
3.最后去环境变量sys.path中查找
# 如果以上都找不到,直接报错
'''
# 以后再给文件名或给模块名起名字的时候,一定不能跟内置模块名冲突
'''如果找不到,那就去sys.path中查找'''
import sys
print(sys.path)
以后遇到模块找不到的情况
1.把模块所在的路径添加到sys.path中
import sys
sys.apth.appen(r'当前文件所在路径')
2.使用from...import...句式
from aaa.bbb.ccc import m1
from aaa.bbb.ccc.m1 import f1
f1()
m1.f1()
8.相对导入和绝对导入
'''在导入模块的时候,模块的查找始终以执行文件所在的路径为准'''
绝对导入:
它始终是以执行文件所在的sys.path路径为基准查找
相对导入:
'''
. (句点符)
. 代表的是当前路径
.. 代表的是上一级路径
'''
# 相对导入可以打破始终以执行文件及准的查找顺序
from .ccc import m2
from .ccc.ddd import m2
只要py文件中出现了相对导入语句( . 开头的语句),那么这个文件就不能当执行文件,只能被导入
9.包的使用
什么是包?
就是文件夹,其实就是文件夹包含了一些列的py文件(模块)
# 包就是一系列模块的组合
包和模块有什么区别呢?
包中有一个特殊文件:__init__.py文件
'''导包其实就是在导包下的__init__.py文件'''