模块
目录
- 迭代器与索引取值的差异
- 模板的简介
- 导入模块的两种语法句式
- 导入模块句式的其他用法
- 循环导入问题
- 模块查找顺序
迭代器与索引取值的差异
-
索引取值的优缺点
优势:可以随意反复的获取任意数据值
劣势:对于无序的容器类型无法取值
-
迭代取值的优缺点
优势:提供了一种通用的取值方式
劣势:取值一旦开始,就不能取取过的值
模块
-
模块的简介
模块就是各种功能的结合形式
使用模块就相当于使用了模块当中的所有功能
-
模块的分类
分类 作用 内置模块 解释器自带的模块,直接可以使用 自定义模块 自己所编写的模块,自己单独定义一个模块,然后由主界面进行调用 第三方模块 别人所编写的模块,存于网络,用时需提前下载 -
内置模块
解释器自带的模块,直接可以使用
如:time
-
自定义模块
自己所编写的模块
自己单独定义一个模块,然后由主界面进行调用
-
第三方模块
别人所编写的模块,存于网络,用时需提前下载
-
-
模块的表现形式
- py文件(py文件也可以称作为模块文件)
- 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
- 已经被编译成共享库等
- 使用C编写并链接到python解释器的内置模块
导入模块
-
导入模块的句式
模块导入句式 运行流程
import句式1.会产生执行文件的名称空间。
2.产生被导入文件的名称空间并运行该文件内的所有代码。
3.通过在执行文件中获取模块的'名字.'的方式可以使用到被导入文件名称空间中的名字
from...import...句式1.创建执行文件的名称空间
2.创建被导入文件的名称空间
3.执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中
4.在执行文件中获取到指定的名字 指向被导入文件的名称空间 import句式流程:
from...import...句式流程:
同一个程序反复导入相同的模块 导入语句只会执行一次
-
两种导入句式的优缺点
模块导入句式 优点 缺点 import句式 通过'模块名'点的方式可以使用到模块内所有的名字 并且不会冲突 '模块名'什么都可以点 有时候并不想让所有的名字都能被使用 from...import...句式 指名道姓的使用指定的名字 并且不需要加模块名前缀 名字及其容易产生冲突(绑定关系被修改) -
补充知识
-
模块名称的创建
以后真正的项目中 所有的py文件名称都是英文
没有所谓的编号和中文
py文件被当做模块导入的时候不需要考虑后缀
-
起别名
-
多个模块文件名相同(多个人写)
from md import money as md_my from md1 import money as md1_my print(md_my) print(md1_my)
-
原有的模块文件名复杂
import mdddddddddd as md
当原有的模块过于复杂时,可以通过as方法将原模块名转换成其他简单的变量名接收
-
导入多个名字
当导入多个名字时,可将不类型的模块分开导入 ~~~python import time import os import sys from md import money, read1, read2 上述导入方式是推荐使用的 因为多个名字出自于一个模块文件 ~~~
-
全导入
需要使用模块名称空间中很多名字 并且只能使用from...import句式
from md import * ""表示所有
ps:针对""号的导入还可以控制名字的数量
在模块文件中可以使用__ all __ = [字符串的名字]控制*能够获取的名字
-
-
循环导入问题
-
什么是循环导入
循环导入就是两个文件彼此导彼此
-
循环导入的问题
循环导入容易出现报错现象
使用彼此的名字可能是在没有准备好的情况下就使用了 -
如何解决循环导入
彼此在使用彼此名字之前 先准备好
-
温馨小提示
循环导入将来尽量避免出现!!! 如果真的避免不了 就想办法让所有的名字在使用之前提前准备好
判断文件类型
-
如何判断文件类型
所有的py文件中都自带一个__ name __ 内置名
当py文件是执行文件的时候 __ name __ 的结果是 __ main __
当py文件是被导入文件的时候 __ name __ 的结果是模块名(文件名) -
开发模块着如何测试自己的代码
通过__ name__ 的方式
if __ name __ == '__ main __':
当文件是执行文件的时候才会执行if的子代码
模块的查找顺序
-
模块查找的先后顺序
1.先去内存中查找
2.再去内置中查找
3.再去sys.path中查找(程序系统环境变量) -
具体查找流程
-
导入一个文件 然后在导入过程中删除该文件 发现还可以使用
import md import time time.sleep(15) print(md.money)
能成功运行是因为,在程序运行阶段,先代码储存到了内存中,直接运行的内存中的代码,在运行期间把调用的文件删除对此次结果没有影响,但当此次运行结束之后,再次运行则会报错。
-
创建一个跟内置模块名相同的文件名
# import time # print(time.time()) from time import name print(name)
创建模块文件的时候尽量不要与内置模块名冲突,如若起冲突则会优先调用内置的模块。
-
导入模块的时候一定要知道谁是执行文件,所有的路径都是参照执行文件来的
import sys sys.path.append(r'D:\pythonProject\day22\xxx') import mdd print(mdd.name)
1.通用的方式
sys.path.append(目标文件所在的路径)
2.利用from...import句式
起始位置一定是执行文件所在的路径
from xxx import mdd
-