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 # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。