Python基础学习(1)基本知识
Python基础学习(2)序列类型方法与数据类型转换
Python基础学习(3)进阶字符串(格式化输出)
Python基础学习(4)散列类型(无序序列)
Python基础学习(5)流程控制
Python基础学习(6)函数基础与函数参数
Python基础学习(7)函数作用域与名称空间.
Python基础学习(8)函数进阶-闭包/装饰器
Python基础学习(9)迭代器/生成器
Python基础学习(10)模块与包
Python基础学习(11)常用模块
一,迭代器
迭代就是重复 但是每一次的重复都是在上一次的基础上升级(更新换代)
迭代特点: 每一次就迭代得到的结果都是下一次迭代的初始值
迭代:
1.里面有多个数据
2.数据之间存在关联性
可迭代对象转变为迭代器
1.声明迭代器
语法一:
变量名=迭代器名称. __ iter__()
语法二:
变量名=iter(迭代器名称)
2.迭代器语法
语法一:
迭代器名称.next()
语法二:
next(迭代器名称)
# 迭代器next一次只能取值一个 并且是向下取值不能回头
# 当进行迭代取值时 超过数据长度会进行报错
for i in range(3): # 单纯的重复 并没有改变 不是迭代
print('大家都是好样的')
print(i) # 存在关联性
可迭代对象: 字符串 元组 列表 集合 字典(对象是key)
只要内置有__iter__()的方法就是可迭代对象
mes = {'name': '婷', 'name1': '谢', 'name2': ''}
res = mes.__iter__()
print(res)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res)
res = mes.__iter__()
while True:
try:
print(res.__next__()) # 把你可能出现异常的代码缩进去
except StopIteration: # 捕捉异常
break # 捕捉异常之后做什么 我就直接break结束循环
res =iter(mes)
print(next(res))
print(next(res))
print(next(res))
总结 就是把可迭代对象转换为迭代器再自动把里面的数据一个个取出 针对字典不用键取值的方法
一次性 选择就不能回头 取完就gg
迭代器其实就是不依赖于索引/方法也可以获取到值的一个操作
二,生成器
生成器: 可以理解为自定义的迭代器 当一个函数中yield 这个关键字的话 那么这个函数就是生成器
def food():
for i in range(5):
yield f'你输入的数字是{i}'
res=food()
print(next(res))
print(next(res))
print(next(res))
print(next(res))
生成器作用和返回值类似 但是函数遇到生成器的时候不是结束 而是暂停
函数返回值代表break 结束函数
def fun():
print(66)
yield '5'
print(888)
yield '6'
fun=fun()
print(next(fun))
print(next(fun))
#66
#5
#888
#6
# 生成器是生成数据 函数里就是返回生成器里的数据 这个的话就是因为生成器只有一个数据
# 所以在返回之后 再次调用生成的话就会报错
三,文件操作
用python代码来操作电脑里的文件(txt,exe,md,py,MP3) – 文本/图片/音频
1.文件操作三要素:
1.打开文件
2.操作文件
3.关闭文件
2.文件操作模式:
w:write 写入数据 如果文件里有数据 会覆盖
a:append 追加数据 如果文件里有数据 不会覆盖而是追加到后面
r:read 读取数据 获取文件里的内容
3.文件的数据类型:
t:text 文本数据 文件模式默认就是文本数据
b:byte 以字节码的方式来操作数据 -- 目前不需要使用 后续学到网络编程/爬虫的时候会使用
wb: 以字节码的方式写入数据
wt: 以文本方式写入数据
rb: 以字节码的方式获取数据
4.文件操作的基本语法:
打开文件:
f=open(文件路径\文件名,操作方式,字符编码)
# 如果没写文件路径 默认就是当前文件夹
f 是作为文件对象 名字不固定 但是一般是叫f
操作方式:
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写 入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文 件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新 的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
wb+ 以二进制格式打开一个文件用于读写。如果改文件已存在则会覆盖。如果改文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果改文件不存在,创建新文件用于读写。
操作文件:
读:
f.read() # 读取所有数据
f.readline() # 一行行读取数据
写:
f.write(数据)
关闭文件:
f.close()
f.closed -- 文件是否已经关闭 True关闭 False没关闭
f.writable() -- 判断文件是否可写
f.readable() -- 判断文件是否可读
上下文管理器 with
为了避免没有关闭文件导致内存泄漏 有种更推荐的写法 叫 with open 这个写法会运行完后自动关闭程序
with open(文件路径\文件名,操作方式,字符编码)as f:
文件操作代码
with open 会自动帮我们关闭文件
as -- 取别名
# 打开文件
file_path = "example.txt"
f = open(file_path, "r+", encoding="utf-8")
# 判断文件是否已经关闭
print(f.closed) # 输出 False
# 判断文件是否可写
print(f.writable()) # 输出 False
# 判断文件是否可读
print(f.readable()) # 输出 True
# 读取所有数据
data = f.read()
print(data)
# 关闭文件
f.close()
# 再次判断文件是否已经关闭
print(f.closed) # 输出 True
四,高内聚低耦合
高内聚 – 一个程序/函数做的事情尽量要统一 专一性 而不是一个函数里面写了一堆的功能这样容易一个错步步错
低耦合 – 程序与程序 函数与函数之间关联性尽量要低 各做各的 不要互相参透太守 避免一个错 步步错
高内聚=一个程序/函数专注做好一件事 = 专一性
低耦合=函数/程序之间嵌套 关联性尽量少 = 离散型