1 # 什么是序列化:数据类型转化成字符串的过程就是序列化
2 # 作用:为了方便存储和传输
3
4 # json 可以操作的数据类型(数字、字符串、列表、字典、元祖)
5 # 通用的序列化格式
6 # 只有很少的一部分数据类型能够通过json转化成字符串
7 # dumps 序列化
8 # loads 反序列化
9 # dump 和文件有关
10 # load load 不能load多次
11
12 # pickle
13 # 所有的python中的数据类型都可以转化成字符串形式
14 # pickle序列化的内容只有python能理解
15 # 且部分反序列化依赖代码
16 # 方法和json一样
17 # dump 和 load的时候 文件是rb或者wb打开的
18 # 支持python所有的数据类型
19 # 序列化和反序列化需要相同的环境
20
21 # shelve
22 # 序列化句柄
23 # 使用句柄直接操作,非常方便
24 # open方法
25 # open方法获取了一个文件句柄
26 # 操作和字典类似
27
28
29
30 # json 提供dumps序列化方法 loads 反序列化方法
31 # dic = {"k1": "v1"}
32 # print(type(dic),dic)
33 # import json
34 # str_d = json.dumps(dic)
35 # print(type(str_d),str_d)
36 #
37 # dic_d = json.loads(str_d)
38 # print(type(dic_d),dic_d)
39
40
41 # dic = (1,2,3,4)
42 # print(type(dic),dic)
43 # import json
44 # str_d = json.dumps(dic)
45 # print(type(str_d),str_d)
46 #
47 # dic_d = json.loads(str_d)
48 # print(type(dic_d),dic_d)
49
50
51 # json dump load (他俩是关于文件的操作)
52
53 # import json
54 # dic = {1: "a", 2: "b"}
55 # f = open('fff', 'w', encoding='utf-8')
56 # json.dump(dic,f)
57 # f.close()
58 # 把字典写到文件里
59
60
61 # import json
62 # f = open('fff')
63 # res = json.load(f)
64 # f.close()
65 # print(type(res),res)
66
67
68
69 # import json
70 # dic = {1: "中国", 2: "b"}
71 # f = open("fff","w",encoding="utf-8")
72 # json.dump(dic,f,ensure_ascii=False) # 如果没有ensure_ascii=False,文件中会出现乱码,是bytes类型
73 # f.close()
74 # f = open("fff",encoding="utf-8")
75 # res = json.load(f)
76 # f.close()
77 # print(type(res),res)
78 # 注:用json中的dump与load 只能是一次性写进去,一次性读出来
79 # 如果想一次一次的读出来,可以用dumps与loads代码如下
80 # l = [{"k": "111"}, {"k2": "111"}, {"k3": "111"}]
81 # f = open('file', 'w')
82 # import json
83 # for dic in l:
84 # str_dic = json.dumps(dic)
85 # f.write(str_dic+'\n')
86 # f.close()
87 # f = open('file')
88 # import json
89 # l = []
90 # for line in f:
91 # dic = json.loads(line.strip())
92 # l.append(dic)
93 # f.close()
94 # print(l)
95
96
97 # pickle可以序列化任何数据类型
98 # pickle 也提供四种方法 dumps loads dump load
99 # pickle 支持分次load json不直接支持
100 # import pickle
101 # dic = {"k1": "v1", "k2": "v2", "k3": "v3"}
102 # str_dic = pickle.dumps(dic)
103 # print(str_dic) # 一串二进制内容
104 #
105 # dic2 = pickle.loads(str_dic)
106 # print(dic2)
107
108
109
110 # 文件就是一个模块
111 # 模块的命名必须符合命名规则
112 # 先导入内置模块 再导入扩展的 例如Django 再倒入自定义的
113
114
115 异常和错误
116 # 程序中难免出现错误,而错误分成两种
117 # 1 语法错误(这种错误,跟本过不了python解释器的语法检测,必须在程序执行前就改正)
118 # 2 逻辑错误
119
120 # 如果不写异常处理语句,输入字母的话,会报错(出红)
121 # try:
122 # ret = int(input('number >>>'))
123 # print(ret*'*')
124 # except ValueError:
125 # print("请输入数字")
126
127 # 使用try和except就能处理异常
128 # try是我们需要处理的代码
129 # except 后面跟一个错误类型 当代码发生错误且错误类型符合
130 # 的时候,就会执行except中的代码
131 # 可以有多个except
132
133 # 万能异常
134 # try:
135 # [][3]
136 # ret = int(input("number>>>"))
137 # print(ret*"*")
138 # except Exception:
139 # print("列表输入有误")
140
141
142
143
144
145 # 面向对象
146 # 人狗大战
147 # def Person(name,blood,aggr,sex):
148 # person = {
149 # "name": name,
150 # "blood": blood,
151 # "aggr": aggr, # 攻击力
152 # "sex": sex,
153 # }
154 # def attack(dog):
155 # dog["blood"] -= person["aggr"] # 人打狗,狗掉血,人的攻击力多少,就掉多少血
156 # print("%s被打了,掉了%s的血" % (dog["name"], person["aggr"]))
157 # person["attack"] = attack
158 # return person
159 #
160 #
161 # def Dog(name,blood,aggr,kind):
162 # dog = {
163 # "name": name,
164 # "blood": blood, # 血量
165 # "aggr": aggr, # 攻击力
166 # "kind": kind, # 品种
167 # }
168 # def bite(person):
169 # person["blood"] -= dog["aggr"]
170 # print("%s被打了,掉了%s滴血" % (person["name"], dog["aggr"]))
171 # dog["bite"] = bite
172 # return dog
173 #
174 #
175 # laoban = Dog("老板",1000,3,"不详")
176 # alex = Person("狗蛋儿",100,2,"不详")
177 # nezha = Person("哪吒",200,2,"不详")
178
179 # # print(laoban)
180 # # laoban["bite"](alex)
181 #
182 # alex["attack"](laoban)
183
184
185
186
187 # class Person:
188 # country = "China" # 创造了一个只要是这个类就一定有的属性
189 # 类属性 也叫静态属性
190 # def __init__(self,*args): # 初始化方法 self 是对象,是一个必须传的参数
191 # print(args)
192 #
193 # alex = Person("狗蛋哥",100,1,"不详")
194
195
196
197 class Person:
198 def __init__(self,*args):
199 # print(self.__dict__)
200 self.name = args[0]
201 self.hp = args[1]
202 self.sex = args[2]
203 self.aggr = args[3]
204 # print(self.__dict__)
205 # print(id(self))
206 def walk(self): # 方法,一般情况下必须传self参数,且必须写在第一个,后面还可传其他参数
207 print("走走走")
208 #
209 alex = Person("狗蛋儿", 100, 1, "不详") # 类名还可以实例化对象,alex就是对象 #这个过程就是实例化
210 print(alex.__dict__)
211 alex.name = '精心'
212 # alex.__dict__["name"] = "太白"
213 print(alex.__dict__)
214 print(alex.name)
215 # print(alex)
216 # print(Person.__dict__) # 不管类还是对象,都可以调用__dict__这个属性
217
218 # 对象 = 类名()
219 # 过程:
220 # 类名() 首先会创造出一个对象,创建了一个self变量
221 # 调用init方法,类名括号里的参数会被这里接受
222 # 执行init方法
223 # 返回self
224 # 对象能做的事
225 # 查看属性
226 # 调用方法
227 # __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
228 # 类名能做的事
229 # 实例化
230 # 调用方法:只不过要自己传递self参数
231 # 调用类中的属性
232 # __dict__对于类中的名字只能看 不能操作
233
234 # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。