第三周总结
本周内容概要
- (部分)数据类型的内置方法
- 可变类型和不可变类型
- 垃圾回收机制
- 字符编码
- 文件操作
- 函数
- 战略补充
数据类型的内置方法(部分)
列表
关键字:list()
类型:可变类型
方法:
1.切片操作(间隔/方向):s1[ i : j : k ]
" i "正数代表取值从左到右的开始位置,负数代表取值从右到左的开始位置
" j "正数代表取值从左到右的结束位置,负数代表取值从右到左的结束位置
" k "正负代表切片方向,大小代表步长
# 产生一个新的列表
2.统计列表数据值个数:len(列表) #也叫函数
3.增删改查之增:
3.1 列表尾部添加一个任意类型的数据:列表.append(数据)
3.2 列表任意位置插入一个任意类型的数据:列表.insert(索引,数据)
3.3 列表结合:
· 列表.extend(被加列表) # 在原列表操作
· 列表+列表 # 形成一个新列表
4.增删改查之删:
4.1 删除索引部分或者整个列表:del 列表[索引值] / del 列表 # 特殊关键字
4.2 “指名道姓”删除:列表.remove(数据值)
4.3 取出来,再删除:列表.pop(索引值) """对列表本身进行操作,返回一个将被删除d""" # 当pop()方法没有索引值时,默认取出列表尾部数据值
5.增删改查之改:列表[索引] = 需要改的数据
6.增删改查之查:
6.1 索引取值:列表[索引值]
6.2 查看数据在列表的索引值:列表.index(数据) # 当index方法找不到数据时,报错
7.统计数据值出现的次数:列表.count(需统计的数据)
8.排序:列表.sort(reverse=True) # reverse参数为控制升降序
9.翻转:列表.reverse()
10.比较运算:
10.1 当数据类型为int类型或者布尔型时,按照位置顺序比对
10.2 不同类型之间默认无法比较
10.3 字符串比较结束比较字符编码的大小
10.4 字典类型不参与比较
元组
"""一个数据值的时候 逗号不能省略.如果省略了,那么括号里面是什么数据类型就是什么数据类型"""
关键字:tuple()
类型:不可变
类型转换:字符串型,集合型,字典型,列表
方法:
1.索引取值:元组[索引值]
2.统计元组内数据值的个数:len(元组)
"""元组的索引不能改变绑定的地址"""
字典
关键字:dict()
类型:可变类型
类型转换:很少涉及
eg:print(dict([('name', 'jason'), ('pwd', 123)]))
print(dict(name='jason', pwd=123))
方法:
1.增删改查之增:字典[一个不存在的key] = 数据
2.增删改查之删:
2.1 del 字典[key]
2.2 字典.pop(key)
2.3 字典.popitem() # 随机删除
3.增删改查之改:字典[key] = 需要修改的数据
4.增删改查之查:
4.1 get(key,"键不纯在时,返回什么,默认为None")
4.2 字典[key] #不推荐使用 键不存在会直接报错
5.统计字典中键值对的个数:len(字典)
6.快速获取键,值,键值对数据
1.字典.keys() #获取字典所有的k值 结果当成是列表
2.字典.values() #获取字典所有的v值 结果当成是列表
3.字典.items() #获取字典kv键值对数据 组织成列表套元组
7.快速构造字典:字典.fromkeys([1, 2, 3], None) #给的值默认情况下所有的键都用一个
8..设置默认v值:字典.setdefault('username', 'jasonNB')
相关细节:
1.字典内k:v键值对是无序的
2.K是对V的描述性性质的信息一般是字符串
3.K其实只要是不可变类型都可以
集合
关键字:set()
类型:不可变
类型转换:字符串型,元组型,字典型,列表
方法:
1.自带效果:去重+自动排序
2.取双方共同数据:字典 & 字典
3.取一方独有数据:字典 - 字典
4.取双方所有数据:字典 | 字典
5.取双方独有数据:字典 ^ 字典
6.父子集:字典 > 字典 # 输出布尔型
相关细节:
1.数据必须是不可变类型
2.定义空集合需要使用关键字才可以
3.集合是无序的,所以不能索引取值
可变和不可变类型
可变类型:值改变(内置方法) 内存地址可以不变
哪些:
1.字典
2.列表
3.集合
不可变类型:值改变(内置方法) 内存地址肯定变
哪些:
1.字符串
2.整型
3.浮点型
4.布尔型
5.元组
垃圾回收机制
Python垃圾回收机制主要是三种:
1.引用计数
定义:一个数据有多少个绑定的变量那么它的引用计数就是多少,当它的引用计数为0时,便符合了回收条件。
"""引用计数存在一个坑:循环引用""" # 会导致无法被调用的数据引用计数也不为0,对内存很不友好。
2.标记清除
定义:将内存所有数据全部检查一遍,把有问题的数据标记并回收清理。
# 可以解决循环引用的问题
# 资源消耗有点大
3.分代回收
定义:将内存数据分代检查,不同代监管力度不同
# 减轻资源损耗
字符编码
简介
1.记录了字符和数据的对应关系
2.只有文本文件才有字符编码的概念
3.计算机内部存取数据的本质是二进制,即 0和1
4.字符编码版本很多,跟地域和历史有关
5.转换关系不能随便更改 应该有统一的标准
发展史

实操
1.注意编码类型,相同类型的编码表才能编码和解码,否则会形成乱码
2.编码:将人类的字符按照指定的编码转换成计算机可以识别的数字
解码:将计算机能够识别的数字按照指定的编码转成人类可以读懂的字符
3.python2解释器默认编码是ASCII码
python3解释器默认编码是utf8码
4.python2执行utf8编码的方式:
1.在文件头部加上:# coding:utf8
2.在定义的字符串前+ u
文件操作
基础了解
1.文件操作:通过编写代码自动操作文件读写
2.文件:文件其实是操作系统暴露给用户操作计算机硬盘的快捷方式之一
3.操作文件方式:
格式:open(文件路径,读写模式,字符编码)
1.变量.open()
变量.close()
2.with open() as 变量名: +子代码 #这个方法可以自动关掉文件
4.r的使用:r字符串
功能:在文件路径中,可取消一些特殊关键字含义
文件读写模式
文件读写有多种模式:
1.只读模式(默认模式) """r模式"""
功能:只读模式只能读取内容,不能进行其他操作。
文件路径:
1.当处于只读模式时,文件路径不存在,则会报错。
2.当处于只读模式时,文件路径存在,则打开文件等待读取。
2.只写模式: """w模式"""
功能:只写模式只能编写内容,不能进行其他操作。
文件路径:
1.当处于只写模式是,文件路径不存在,则会在本文件夹中自动创建该文件。
2.当处于只写模式是,文件路径存在,则会清空该文件的内容,然后等待编写。
3.只追加模式: """a模式"""
功能:只追加模式默认是在末尾追加新的内容,不能进行其他操作。
文件路径:
1.当处于只追加模式是,文件路径不存在,则会在本文件夹中自动创建该文件。
2.当处于只追加模式是,文件路径存在,则会在文件内容末尾等待填写。
4.读写模式(了解即可): """+模式"""
1.r+:打开一个文件用于读写。文件指针将会放在文件的开头
2.w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
3.a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
4.rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
5.wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
6.ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写
文件操作模式
文件操作有种模式
1.文本模式: """默认模式""" # r/rt w/wt a/at
1.只能操作文本文件
2.必须指定encoding参数
3.读写都是以字符串为单位
2.二进制模式: # rb wb ab
1.能够操作所有类型的文件
2.不需要指定encoding参数
3.读写都是以bytes为单位
文件操作方法
1.read():读取内容,并将光标移到文件末尾
2.readline():读取一行数据
3.readlines():读取全部内容,并用列表返回
4.readable():判断当前文件是否可读
5.write():填写文件内容
6.writelines():可以填写多个不同类型的数据
7.writable():判断当前文件是否可写
8.flush():将当前内存数据存入硬盘 # ctrl+s
9.read(数字):
文本模式:在此模式下,代表从光标位置向后读取几个字符
二进制模式:在此模式下,代表从光标位置向后读取几个字节
10.tell():获取光标移动的字节数
11.seek(offset,whence): 移动光标
offset:控制光标移动的字节量,大小代表步长,正负代表方向。
whence:
0:将光标移动到文件开头
1:光标停留在当前位置
2. 光标移动到文件末尾
补充:文件操作支持for循环。
文件数据修改
两种方式:
1.覆盖写:先读取文件内容到内存 在内存中完成修改 之后w模式打开该文件写入
优点:硬盘只占用一块空间
缺点:数据量较大的时候会造成内存溢出
2.重命名:读取文件内容到内存 在内存中完成修改 之后保存到另外一个文件中,再将原文件删除 将新的文件重命名为原文件
小知识:
优点:不会造成内存溢出
缺点:有那么一段时间需要占用硬盘两个地方的空间(可能),也可能是在内存中创建没有刷到硬盘
机械硬盘储存数据用的是覆盖写,数据的删除,是将占有态数据转变为自由态数据。
函数
函数的定义与调用
函数:一段被封装,等待执行的代码(自己定义)
1.函数必须先定义后使用
2.def关键字定义函数,调用函数使用函数名加括号及参数
3.函数在定义阶段只检测不执行函数体代码语法,只有在调用阶段才会执行函数体代码
4.函数名就是存有函数体地址的变量,运行函数体代码需要加括号
5.函数名+()优先级最高
函数的语法结构
def 函数名(参数1,参数2):
'''函数注释'''
函数体代码
return 返回值
1.def:函数定义关键字
2.函数名:变相的变量名,储存函数体地址
3.括号:必须拥有,也是调用函数时函数体是否执行的指标
4.参数:用于接收外界传递的数据,在函数括号中,可写也可以不写,个数不定
5.函数注释:解释函数的用法和功能
6.函数体代码:功能逻辑代码
7.return:控制函数的返回值
函数的分类
1.内置函数:
解释器提前帮你定义好的函数 用户可以直接调用
2.自定义函数:
1.空函数: 函数体代码没有任何功能
2.无参函数:函数定义阶段括号内没有填写参数
3.有参函数:函数定义阶段括号内填写参数
函数的返回值
返回值:就是return关键字输出的值
1.没有return关键字默认返回为None
2.return关键字后面为空时,返回为None
3.return关键字后面输出什么,那就返回什么
4.return关键字为多个数据并列并用逗号分隔时,输出元组
5.程序遇到return关键字时立刻结束,并返回放回值
函数的参数
参数有两大类:
1.形式参数(形参):函数在定义阶段括号内填写的参数 #相当于是变量
1.位置形参:在函数定义阶段括号内从左往右依次填写的变量
2.默认值形参:在函数定义阶段括号内以 '变量 = 数据' 的形式填写的形参
3.可变长参数:
1.函数(*args):接收多余的 '位置参数'并组织成元组的形式赋值给*后面的变量名
2.函数(*kwargs):接收多余的'关键字参数'并组织成字典的形式赋值给**后面的变量名
2.实际参数(实参):函数在调用阶段括号内填写的参数 #相当于是数据值
1.位置实参:在函数调用阶段括号内从左往右依次填写的数据值或变量
2.关键字实参:在函数调用阶段括号内以 '变量 = 数据'的形式传值
1.指名道姓的给形参传值(打破了位置的限制)
2.位置实参必须在关键字实参的前面
3.同一个形参在一次调用中只能传一次值
"""位置实参传值数量必须等于位置形参"""
"""函数调用时会将实参和形参绑定,函数结束时,绑定解除"""
战略补充
1.with open 语法可以一次打开多个文件,但是建议不要超过两个。
2.补全语法:
1.pass #推荐使用
2....