迭代器和索引取值的区别
* 索引取值
l1=[11,22,33,44,55,66]
peint(l1[0])
print(l1[1])
print(l1[0])
* 迭代器取值
res=l1.__iter__
print(res__next__())
print(res__next__())
print(res__next__())
索引取值:它可以随意取任意的值,但是针对无序的类型就不可以了。
迭代:提供了一种通用的取值方式,但是一旦开始就无法回头。
模块简介
* 模块如何理解:可以把模块看成是一系列功能的结合体,在使用这个模块的时候我们就相当于拥有了这个结合体全部的功能。
* 模块的分类
内置模块:python自带的 直接可以使用的模块
import time
time.sleep(5)
自定义模块:就是自己写的模块
比如注册功能 登陆功能
第三方模块:就是别人写好的 放在网上自己去下载然后进行使用的
图形识别 图形可视化 语音识别、
* 模块的表现形式
1 py文件 (也是可以称为模块文件)
2 含有多个不同功能的py文件
3 已经被编译为共享库或DLL的c或c++扩展
4 使用c编写并连接到python解释器的内置模块
导入模块的两种方式
在以后真正的项目中所有的py文件名称都是英文没有其他的表达方式 相编号和中文都是不存在的。py文件被当作模块导入的时候不需要考虑后缀
* 导入模块的句式1 import
import md
执行的文件是 正在执行的文件
导入模块的文件是 md.py
会产生执行文件按的名称空间
产生被导入文件按的名称空间并运行该文件内所有的代码存储名字
在执行文件种会获取一个模块的名字 通过名字+.的方式就可以使用到被导入文件名称空间中的名字
* 当同一个程序反复导入相同的模块 导入的语句只能只能执行一次
money = 100
print(md.money) 999
print(money) 100

* 导入模块句式2 from...import...句式
from md import money 这里就是指名道姓的导入
print(money) 999 、
money=888
print(money) 888
print(read1)
print(md.read1())
from md import monye,read1
read1()
1 创建执行文件的名称空间
2 创建被导入文件的名称空间
3 执行被导入文件中的代码 将产生的名字存储到被导入文件按的名称空间中
4 在执行文件中获取到指定的名字 指向导入文件的名称空间

两种句式导入的优缺点
import md
优点:通过md+.的方式可以使用到模块内所有的名字 而且也不会有冲突
缺点:md什么都可以点
from md import money,read1
优点:直接是指名道姓的使用 并不需要加模块的前缀
缺点:两者容易产生冲突而且绑定的关系也被修改了
补充知识
* 起别名
当很多个文件名相同并有多个人写
from md import money as md_my
from md import money as md1_my
print(md_my)
print(md1_my)
在后面加上as再将想修改的名字写在后面
当原有的文件名比较复杂时
也是同样的操作
from mdddddddddd import as md
* 导入多个名字
import tinme,sys,os
这样的多名字导入只有在模块功能非常相似的时候 如果不相似还是分开写
import time
import sys
import os
from md import money,read1,read2
这样使用时可以的 因为很多的名字都是一个模块文件的
* 全导入
* 需要使用模块中的很多名字时只能使用指定方式 from...import句式
from md import * 这里的* 表示所有的意思
对* 号导入也可以控制名字的数量 在模块里使用__all__=[字符串的名字]控制* 能够获取的名字
循环导入的问题
- 循环导入就是将两个文件互相导入
- 循环导入容易出现报错现象,使用两者的名字可能是在没有准备好的情况下就使用了
- 在使用两者名字之前就要准备好 这样才能避免出现保存现象
判断文件类型
* 在以后的程序运行中可能涉及到的文件不止一个
* 所有的py文件都自带一个__name__内置名
当py文件时执行文件时__name__的结果时__main__
当py文件是被导入文件的时候__name__的结果时模块名也就是文件名
* __name__主要__用于开发者测试自己的代码使用
if __name__=='__main__':
当文件是执行文件时才会执行if的子代码
模块的查找顺序
* 可以先去内存中查找
* 再去内置中查找
* 再去sys.path中查找(程序系统环境变量)
* 导入一个文件然后在导入过程中删除该文件 还是可以使用
import md
import time
time.sleep(15)
print(md.money)
在这个过程中让利用时间戳让电脑休息了15秒将py文件删除后还是可以运行并且不会报错 如果不利用时间戳则会报错
* 创建一个跟内置模块相同的文件名
import time
print(time.time())
from time import name
print(name)
这个过程中使用了与内置模块相同的名字导致报错
* 导入模块时要知道谁是执行文件
import sys
sys path.append(py文件路径)
import mdd
print(mdd.name)
要看清文件所在上一级的文件的路径 如果上一级还有一级那就要把路径写到目标文件那里
* 通用的方式:sys.append(目标文件所在的路径)
* 利用from...import句式 最开始的位置一定是执行文件所在的路径
from xxx import mdd