python基础复习 12

  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+'
')
 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 # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。
原文地址:https://www.cnblogs.com/pioneerLee/p/10218281.html