笔记笔记
来自一个没空学习的菜鸡大学生,加油
1.字符串只能全部的进行覆盖修改,不能调一两个字母修改
2.字典可以嵌套列表
1 zidian = {"name":"xlm","age":15,"hobby":["woman","gril","famale"]} 2 print (zidian)
3.列表则可以嵌套任何东西,包括字典、元组
如
1 zidian = {"name":"xlm","age":15,"hobby":["woman","gril","famale"]} 2 print (zidian) 3 list_1 = ["xlm","bc",520,zidian] 4 print ("\n",list_1)
结果
4.字典不用保存下标
- 字典是无序的
- 因为key必须是唯一的,所以天生去重
集合操作:
1.把一个列表转成集合:
1 list_1 = [1,4,5,8] 2 list_2 =set(list_1) 3 4 print (list_1,"\n",list_2)
结果:
2.集合的算法
1 a = set([3,5,9,10]) #创建一个数值集合 2 3 b = set("Hello") #创建一个唯一字符的集合 4 5 print(a&b) #打印他们的交集 6 print(a|b) #打印他们的并集 7 print(a-b) #打印前者对于后者的差集 8 print(a^b) #打印他们的对称差集(打印他们每个特有的,一样的不会打印)
除了这些简便的还有一些花里胡哨的:
交集
Print(list_1.intersection(list_2))
并集
Print(list_1.union(list_2))
差集
Print(list_1.difference(list_2))
检测前者是不是后者的子集
Print (list_1.issubset(list_2))
检测前者是不是后者的父集
Print(list_1.issuperset(list_2))
有交集返回false
print (list_1.isdisjoint(list_2))
.
增删改查:
增加
list_1.add(66)
一下加很多
List_1.update([88,77,66])
删除
List_1.remove()括号写参数 没有参数会报错
List_1.pop() 括号内空白随机删,要填参数会报错
List_1.discard() 内部写参数,没有不报错
测试x是不是s的成员
X in s
检测x是不是不是s的成员
X not in是
检测x是不是每个元素在s中
x.issubset(s)
文件:
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
读写文件指令:
1 f = open("ceshi.py","r",encoding="utf-8") #f取到的值是这个文件的句柄 2 # 程序名字 选择模式 选择字符编码
打开文件的模式有:后两种(u,b)不常用
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】常用
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
常用后缀
f.readline() 只读这个文件的第一行
读多行,可以使用for循环,如
for line in range(5) print(f.readline())#打印五行
for line in f.readlines():
print(line) #全部打印出来
效率最快,最节省空间的读取方法,就是读一行关一行:
1 for line in f.readlines()
2 print(line)
文件常常使用的 .后缀
f.tell 字符的个数
f,seek() 回到那个位置
f.name() 打印f文件的名字
f.isatty()检测是不是终端设备常见的有显示器打印机等
f.seekable() 判断是不是能够移动
f.readable()
f.writeable() 判断是不是可以读写
f.flush() 刷新
f.close 是不是关闭了
f.truncate(20)从开头开始截出20个数字出来
使用time模块和刷新,设置一个进度条
1 import sys,time 2 3 for i in range(20): 4 sys.stdout.write("0") 5 sys.stdout.flush() 6 time.sleep(0.1)
结果
下面的零逐个打印,相隔时间确定
with open 语句
实现即时打开即时关闭
with open ("file name","mode",encoding="utf-8 or anyone") as f: #上面的的代码就相当于 #这个这个 f = ("file name","mode",encoding="utf-8 or anyone") for line in f print("line") #标准的这么写 with open ("ceshi.py","r",encoding="utf-8") as f: for line in f: print(line)
结果就是将文件一行一行打印了出来
字符编码转换
print(s)
print(s.encode("gbk")) 解码成gbk
print(s.encode("utf-8")) 解码成utf-8
print(s.encode("utf-8").decode("utf-8").encode("gb2312"))
解码 解码 再次解码
print(s.encode("gb2312"))解码成utf-8
print(s.encode("gb2312").decode("gb2312"))打印出来是中文,相当于解码又编码
编码(告诉他本来是啥直接转换成uncode)
解码(告诉他你要从uncode转成啥)
函数
面向对象 类 class
面向过程 过程 def
函数式编程 函数 def
定义一个函数
def okok_1():#函数名字叫okok_1 print("one")#函数内容 return 0 #函数的返回值(不一定有没有返回值)
过程式函数可以理解为一个没有返回值的函数
调用时间模块实现日志功能:
1 import time 2 def loggeer(): 3 time_format = "%y--%m--%d--%x" 4 time_current = time.strftime(time_format) 5 with open ("ceshi.py","a+",encoding="utf-8") as f: 6 f.write("\n%s end"%time_current) 7 8 def text_1(): 9 print ("第一个") 10 loggeer() 11 12 13 text_1()
return 0:
返回一个值,同时可以标志着一个值得结束
返回的值可以是none 可以返回列表、字符串、字典等
参数函数:
def text(x,y)
print (x)
print(y)
调用这个函数的时候可以直接将实际参数写入
如 text(1,2)既可以代表x=1,y=2
这个参数不能多也不能少
可以调用时这样:text(y=2,x=1)
而且关键参数不能写在位置参数前面:
可以text(1,y=2)
不可以text(x=1,2)
当然也不可以text(1,x=2)
默认参数
def text (x,y=3)
在调用这个程序时,如果y不写实际参数那么y就采用默认值也就是2
注意:在使用默认参数的时候,默认的参数要在未知的参数的后面
*args 和 **kwargs
Def test2 (x,*args)
这时候的x存第一个值后面的值都以元组的形势存在或者说传递到后面
def test2(x,**kwargs)
在储存完x之后,后面的值都以关键字函数储存为了字典的形式
*args是说将接收到的多个位置参数,转换为元组的形势
**kwargs 是说将接收到的多个关键字参数,转换为字典的形式
局部变量和全局变量
局部变量
函数中的变量,出了这个函数那么这个变量就不存在了
全局变量
在所有代码的顶层变量就是全局变量
全局变量的列表,字典变量可以在局部函数中被更改。但是字符串,数值,元组不能被修改
递归程序:
自己的程序还没有完成就调用自己的程序
1 def calc(n): 2 print(n) 3 if int(n/2>0): 4 return calc(int(n/2)) 5 print("--->","完成") 6 7 calc(10)
结果
Eval可以将一个字符串转成这个字典
1 message = ''' 2 {'name':'xlm', 3 'age':'14', 4 'hobby':'["woman","gril","female"]'} 5 ''' 6 7 message = eval(message)#将字符串转换成字典 8 print (message) 9 print (message['name'])
结果
j