今日内容概要
迭代取值与索引取值的差异
模块
导入模块的两种语法句式
导入模块句式的其他用法
模块查找顺序问题
下面将对这段列表代码进行所以取值和迭代取值
l1 = [11, 22, 33, 44, 55]
索引取值
print(l1[0]) 11 print(l1[1]) 22 print(l1[0]) 11
迭代取值
res = l1.__iter__() #用双下iter方法将l1转化为迭代器,再传给res,随后再通过双下next方法进行取值 print(res.__next__()) #11 print(res.__next__()) #22 print(res.__next__()) #33 print(res.__next__()) #44 print(res.__next__()) #55 print(res.__next__()) #报错
将二者取值对比一下我们不难发现他们之间的差别:
索引取值: 可以反复的取容器内任意值 但是对于一些无序的容器(比如字典,集合)类型无法取值 迭代取值: 可以取任意容器中的值 但是他的取值是顺序取值而且是不可返回的
二者均有优缺点,具体使用那种要结合实际情况判断。
2.1模块简介
模块是什么?
模块可以看成一个组装好的工具箱,这个工具箱不止一个,而且每个工具箱都有它独特的功能, 我们在要用的时候选择适合的工具箱,工具箱里面的工具也都有独特的功能。 在python中,我们需要额外的.py文件来承接工具箱也就是模块, 模块中大大小小的函数等就是工具箱中的扳手钳子啊之类的。
2.2模块的分类
模块大致可以分为三类(内置,第三方,自定义)
1.内置模块 与之前的内置函数一样是解释器自带的,可以直接使用 比如time,os 2.第三方模块 就是别人写好的模块,然后我们拿过来直接使用就行了 比如图形识别 图形可视化 语音识别 3.自定义模块 顾名思义就是我们自己写模块,然后使用 比如注册功能模块 登录模块
再讲此内容之前我们先来了解一下导入模块的规范
1.在以后的所有项目中,所有的模块的py文件名称都是英文 eg: 错误的 01.变量的使用 正确的 test01.py 2.py文件被当做模块导入的时候不需要考虑后缀 eg: import md #这里的md是md.py模块文件,导入的时候是不需要后缀.py的
3.1import
句式: import + 模块的文件名 eg: import mk
首先创建一个mk文件和一个执行模块文件
在mk模块文件中输入
再在执行模块文件中输入
输出结果就是
由上述我们得出结论
执行文件是 执行模块.py
被导入文件是 mk.py
同时结合之前所学的名称空间一说我们还能得到以下结论
1.会产生执行文件的名称空间
2.产生被导入文件的名称空间并运行该文件内所有的代码 存储名字
3.在执行文件中会获取一个模块的名字 通过该名字点的方式就可以使用到被导入文件名称空间中的名字
import模块导入时名称空间详细
同时,如果在一个程序中导入相同的模块,导入语句只会执行一次
3.2 from...import...
语法:from +要导入模块的文件名 + import + 模块内元素
执行流程:
首先在mk中输入这两句话,等下我们要调用mc
然后在执行模块中用from...import...导入mc 并把它打印下来
结果是
可见只有mc被打印出来了,而mxiangk没有被执行
相当于from...import...是指名道姓的导入
from...import...模块导入时名称空间详细
3.3两种语句的优缺点
import md 优点:通过md点的方式可以使用到模块内所有的名字 并且不会冲突 缺点:md什么都可以点 有时候并不想让所有的名字都能被使用 from md import money, read1 优点:指名道姓的使用指定的名字 并且不需要加模块名前缀 缺点:名字及其容易产生冲突(绑定关系被修改)
补充:
当遇到多个模块文件名相同或文件名比较复杂时时,可以给文件名加后缀 import语句和from...import....语句都可以导入多个名字 import time, sys, os from md import money, read1, read2
3.4全导入(*)
需求:需要使用模块名称空间中很多名字 并且只能使用from...import句式 from md import * # *表示所有 ps:针对*号的导入还可以控制名字的数量 在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字
4模块的查找顺序
1.先去内存中找 导入一个文件,在执行过程中删除该导入的文件,发现代码可以继续执行 2.再去内置中找 创建模块文件名的时候尽量不要和内置模块名冲突 3.再去sys.path(程序系统环境变量)中找 导入模块的时候一定要知道谁是执行文件 所有的路径都是参照执行文件来的 import sys sys.path.append(r'D:\pythonProject\day22\xxx') import mdd print(mdd.name)