1.字符串不可以修改,修改就是全部更新了。
2.集合(set)(无序)
去重:列表变成集合自动去重
关系测试:测试两组数据的交集、差集、并集等关系
两个列表:list_1,list_2
去重:list = set(list_1)
交集:new_list = list_1.intersection(list_2) or new_list = list_1 & list_2 # intersection 交叉
并集:new_list = list_1.union(list_2) or new_list = list_1 | list_2
差集:new_list = list_1.difference(list_2) or new_list = list_1 - list_2
子集:判断是否为子集 list_1.issubset(list_2) or list_1 <= list_2
父集:判断是否为父集 list_1.issuperset(list_3) or list_1 >= list_3
对称差集:去掉两个中都有的 list_1.symmetric_difference(list_2) or list_1 ^ list_2
集合的添加:
list_1.update([111,222,333]) #多项添加,记得括号中的是中括号
list_1.add(999) #单项添加
集合的删除:
list_1.remove() # 若不存在删除的元素,则报错
list_1.discard() #若不存在删除的元素也不会报错
清空集合:
list_1.clear 列表同样适用
3.文件
文件打开
r 只读
r+ 读写模式,可以打开,然后追加内容
rb 读二进制文件(比如视频),而且读二进制文件不能传递encoding参数
网络传输只能用二进制模式传输
打开二进制文件
w 只写,而且是创建新文件,原来有是重新覆盖原来的文件
w+ 写读模式,基本上没有用,先创建在向里面写,
wb 写二进制文件
a 追加,追加在最后,该模式不能读
a+ 追加读写
文件操作
read
read 全部读
readline 一行一行的读
readlines 读取成为一个列表,每一行为一个元素
readable() 判断文件是否可读
write
writeable 判断文件是否可写
tell 打印光标所在的位置,一个字符算一个位置
seek() 移动光标所在的位置,括号里面输入数字代表所在的位置
seekable() 不是所有的文件的光标都可以移动的,这个是判断文件是否可以移动光标
encoding 打印文件编码
flush() 强制刷新,写文件不是立即写进硬盘中去,是放在内存缓存中的,等缓存满了或者命令执行完毕,才会出现在硬盘上,而这个命令强制刷新,直接写硬盘中
这个很重要,强制刷新。
rtuncate()从头开始截断文件,从括号中的数字截断删去
文件关闭
1.close()
2.with(支持打开多个文件)
with open('yesterday','r',encoding='utf-8') as f , \
open('yesterday_new','r',encoding='utf-8') as f_new: (开发规范,一行代码不超过80个字符,所以应该换行打开,逗号后加 \)
......
with执行完毕自动关闭文件
4.字符串转二进制文件加上.encode('utf-8') 括号中跟字符串的编码格式
eg:'who are you?'.encode('utf-8')
5.字符编码和转码
decode()编码,要带上字符集原来的编码格式,将编码转成Unicode编码
encode()解码,括号中带上要转成的编码。
eg:一个原始字符集str是以utf-8的编码格式写的,我现在要把这个字符转成gbk的编码格式
str_to_gbk = str.decode('utf-8').encode('gbk')
6. 面向对象——类——class
面向过程——过程——def——没有返回值
函数式编程——函数——def——有返回值
函数
优点-1.减少重复代码
2.保持代码一致性
3.程序容易扩展
return会返回值并且终止函数的运行
return中如果返回对个返回值多个值,可以用多个变量接收,也可以用一个变量接收,但是一个变量接收的时候,返回的就是一个tuple
函数传参-参数组
1.text(var1,*var2),可输入多个值,第一个视为var1的值,后面的值则看成一个元组传给*var2
2.text(var1,**var2),可输入多个值,第一个视为var1的值,后面的值则看成一个字典传给*var2
eg:text(1,name = 'sbs',age = 23,job = 'iter',salary = 20000)
当然*var1和**var2可以联合使用
eg:
test(var1,*var2,**var3)
eg:text(1,2,3,4,5,name = 'sbs',age = 23,job = 'iter',salary = 20000)
其中1传给了var1,2345传给了var2,剩余的传给了var3
全局变量个局部变量关键字
global(局部定义成全局) 和 nonlocal(全局定义成局部)关键字
递归:函数可以在函数内部调用其他函数,如果函数在函数内部调用自己,这个函数就叫做递归函数
1.必须在函数内部有明确的结束条件,不结束的话Python中递归999次之后报错
2.每次进行递归时,问题的规模都应该比上一次的递归都应有所减少
3.递归效率并不高。
做递归最好的看就是调试,不易出错。
高阶函数(装饰器必修):(满足条件之一)
1.函数本身当做一个实参数传给另外一个函数
eg:
def add(a,b,f):
print('计算a+b得值')
return f(a)+f(b)
n = add(3,-9,abs)
print(n)
可以在不修改原函数abs的情况下,为abs附加打印其作用的功能,但是改变了调用方式
2.返回值中包含函数名
def bar():
'''in the bar'''
time.sleep(1)
print('in the bar')
def test2(func):
print('这是加的新功能!')
return func
bar = test2(bar)
bar()
在不修改bar函数的情况下,为bar函数附加了一个新功能,并且调用方式没有发生改变
嵌套函数:
函数里面再定义一个函数