本周内容总结
文件的读写模式
https://www.cnblogs.com/xiaochenxiangchangpang/p/16772465.html
#最常用的有:r a w
r 只读模式 只能读取文件的内容
w 只写模式 只能写不能看
a 追加模式 从文件的末尾加上数据
文件的操作模式
#文件的操作模式: t b
t: 文本模式
只能操作文本文件 读写是以字符为单位
b: 二进制模式
可以操作所有文本文件格式 读写是以字节为单位
文件的诸多用法
1.read() 一次性读取文件中的所有
2.for循环 避免了内存溢出
3.readline() 一次只读一行内容
4.readlines() 同上,但会返回根据函数来做值的一个列表
5.write() 写入数据
6.readable() 判断是否具有可读能力
7.writeable() 判断是否具有可写的能力
8.writelines() 接受一个列表将列表的所有数值写入
9.flush() 直接将数据保存到硬盘(ctrl+s)
文件的光标移动
with open(r'文件路径',rd) as f:
f.seek(0,0)
'''
seek的使用
seek(offset,whence)
offset为光标的位移量
whence是模式 (0,1,2)
0 是基于开头位置 文本与二进制均可用
1 是基于当前位置 只有二进制数可用
2 基于末尾位置 只有二进制可用
'''
硬盘修改数据的原理
https://www.cnblogs.com/xiaochenxiangchangpang/p/16773231.html
硬盘存储数据相当于将数据刻在了硬盘上 只有前后可以修改 中间只能重现填写
#被删除的数据从占有态变成了自由态
#变成自由态的数据只有被覆盖了才会被真正删除
文件修改内容的底层原理
#覆盖写
1.覆盖写入数据可以直接删除之前所保存的
2.文件中所有与数据类型相同的数据都会被删除
#换地方写
1.在另一个地方写用.swag的方式来将源文件删除
2. .swag的作用是重命名
函数
函数的基本
#概要
函数可以创建一个可以提供反复使用的代码承载体
在不同的位置执行相同的代码
#语法结构
def 函数名(形参):
函数体代码
return
'''
1.函数名与变量名取法一样
2.参数根究设置
3.return用于反馈给函数使用者的一个函数执行完毕的信号
'''
#函数调用
在函数已经被定义了之后 直接使用函数名加括号就可执行函数体代码
有参数就要传入相对应的参数(可变长形参除外)
#函数的返回值
是函数体代码执行完之后反馈给使用者的信号 可以被自定义
1.当不设置或者只写return 则默认反馈none
2.在return可写入想要反馈的内容
函数的参数
https://www.cnblogs.com/xiaochenxiangchangpang/p/16776427.html
#形参
位置形参:
括号内从左往右的传递 数据与实参一一对应 不能少也不能多
可变长形参:
括号内填写 *args **kwargs
*args 可接受多余的位置形参 #返回一个元组
**kwarge 可接受多余的关键字传参 #返回一个字典
默认形参:
当括号内直接给形参赋值 后续的传参必须使用关键字传参不然该参数就无法被改变
#实参
位置实参:
括号内从左往右 数量与位置要与位置形参一一对应
关键字传参:
指定一个形参传定固定的值 但一个形参不能接受多个值
可变长实参:
在括号输入*args 可将一个数据一个一个拆分 并一起传递给形参
在括号输入**kwargs 只针对字典中值 也是将其一起传递给形参
命名关键字传参:
def fff(*args,c=1,**kwargs):
pass
当出现上面的情况时 c必须通过关键字传参才能接受到新数值
#命名规范
在书写个各种参数时 越简单的越靠前 越复杂的越靠后
名称空间
#1.内置名称空间
解释器运行产生 存放一些内置函数的名称 关闭则就销毁
#2.全局名称空间
py文件运行时产生 存放变量名 运行结束销毁
#3.局部名称空间
函数被调用时产生 结束就销毁
#名字的查找顺序
局部名称空间
局部名称空间>>>全局名称空间>>>内置名称空间
全局名称空间
全局名称空间>>>内置名称空间
global与nonlocal
https://www.cnblogs.com/xiaochenxiangchangpang/p/16782109.html
global
可以在局部名称空间修改全局名称空间的数据值
nonlocal
可以在内层的局部名称空间修改上层级的数据
函数名的多种用法
函数名与变量名不同的是函数名所绑定的是一个内存地址 负责存储函数体代码
1.可以当作变量名赋值
2.可以给函数传参
3.可以作为函数的返回值
闭包函数
#定义:
定义再函数内部的函数 并且使用到了外部函数的名称空间的变量名
#实际运用
是给函数传参的一种形式
装饰器
装饰器简介
在不改变函数源代码以及调用方式的情况下为函数添加新功能
1.本质:
将之前所学的闭包函数 函数参数 名称空间的多种用法结合到一起
2.口诀:
对内封闭 对外扩张
装饰器的推导流程
详细:https://www.cnblogs.com/xiaochenxiangchangpang/p/16782109.html
装饰器语法糖
符号:@
使用:
语法糖可以将下方紧挨着的一个函数名当作第一个参数自动传给@后面的函数名调用
多层语法糖
1.读取顺序从下到上
2.如果每次执行之后上边还有语法糖 则会直接返回值给函数名传递给上面的语法糖
有参装饰器
在最外层再套一层函数 每嵌套一层都需要return
有参装饰器的参数是 缺什么传什么
装饰器的模板
https://www.cnblogs.com/xiaochenxiangchangpang/p/16785086.html
递归函数
#1.函数的递归
直接或间接的调用自己
#2.最大递归深度
1000次左右
#3.递归函数要满足递归与回溯
递归:一层层往下
回溯:基于目标一层层往上
使用递归函数要满足每一层都要更简单 有一个明确的终止条件 并且每一次都要离目标更近
算法
https://www.cnblogs.com/xiaochenxiangchangpang/p/16789450.html
#算法是解决问题的有效办法 不是所有的算法都很高效
二分法:
算一个简单的算法
使用条件:一个有序的(升/降序)数据集
使用中间索引值与我们所要找的数据做一个大小比对 再切割数据集 以此类推
意义: 再数据较多 且不在两头的数据 可以使计算机进行更加少的操作寻找到数值
三元表达式
#使用格式
数据值1 if 条件 else 数据值2
当条件满足调用数据值1 条件不满足使用数据值2
三元表达式不推荐嵌套使用 容易搞混 可读性也不高
最好是二选一的结构去使用
生成式,表达式,推导式
#各个生成式及相关:
https://www.cnblogs.com/xiaochenxiangchangpang/p/16789450.html
补充:
#匿名函数
没有函数名的函数
关键字:lambda
使用场景:匿名函数一般不单独使用 需要配合其他函数的使用
内置函数大全
#内置函数大全及用法
https://www.cnblogs.com/xiaochenxiangchangpang/p/16792405.html
可迭代对象
#1.可迭代对象
当对象的内置方法里有__iter__都可称为可迭代对象(支持for循环的)
#2.可迭代的范围
可迭代对象:
str list dict tuple set
不可迭代的:
int float bool
迭代器对象
#1.迭代器对象
当对象内置的方法里有__iter__和__next__都是迭代器对象
#2.迭代器对象的作用:
提供一种不依赖索引取值的方式
#3.__iter__的使用
当可迭代对象加上__iter__后可变为迭代器对象 迭代器加上不会有什么变化
#4.__next__的使用
__next__可以一个一个取到迭代器对象里所包含的值 当迭代器被取空时 再使用则会报错
for循环的本质
for 变量名 in 可迭代对象:
循环体代码
1.先将 in 后面的数据调用给__iter__转变为迭代器对象
2.依次让__next__取值 并赋值给变量名
3.当全部被遍历完以后 for循环会自动捕捉异常 使其不报错
异常的捕获以及处理
#1.异常
异常就是代码运行报错 又称bug
代码运行到异常处会直接停止运行 并结束整个程序
#2.异常分类
语法错误
语法错误导致的异常是破坏了语法结构 导致计算机无法识别
eg:if后不加冒号 或者子代码不缩进
逻辑错误
代码编写的时候一眼无法识别的异常 只有在执行之后再回发现的异常
eg:没有命名变量名 但在后续直接使用