python 笔记 3

本贴最后更新于 2968 天前,其中的信息可能已经斗转星移

list and dict

关于 list、dict 的删除:

d = [1,2,3,4,5] x = d.pop() y = d.pop(0) del d[1] print(x,y,d) ''' 输出: 5 1 [2, 4] '''

可以使用 pop 和 del 来删除。pop 是类自带的函数,删除成功返回 pop 的值。del 是全局函数,不返回值


一些特殊方法

import math class A(object): __slots__ = ('x', 'y', 'z') def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __del__(self): #这个是析构函数 pass def __str__(self): return "(%s,%s,%s)" % (self.x, self.y, self.z) def __getitem__ (self, index): index %= 3 arr = {0: self.x, 1: self.y, 2: self.z } return arr[index]; def __setitem__(self, index, value): index %= 3 arr = {0: 'self.x = value', 1: 'self.y = value', 2: 'self.z = value'} exec(arr[index]) #上面这个函数的写法我感觉不舒服,但我目前想不到更好更简洁的 def __eq__(self, s): l_self = pow(self.x, 2) + pow(self.y, 2) + pow(self.z, 2) l_s = pow(s.x, 2) + pow(s.y, 2) + pow(s.z, 2) return l_self == l_s #类似的有lt(less than),gt,ne,le(less than or equal),ge def __add__(self, s): x = self.x + s.x y = self.y + s.y z = self.z + s.z return A(x,y,z) #类似的有sub,mul,truediv,floordiv..等,一个道理 # class A 结束 def main(): ins = A(1,10,100) #__init__ print(ins) #__str__ print(ins[0]) #__getitem__ ins[0] = 50 #__setitem__ print(ins[0]) n_ins = A(50,10,100) print(ins == n_ins) #__eq__ nn_ins = ins + n_ins #__add__ print(nn_ins) if __name__ == '__main__': main() ''' 输出>> (1,10,100) 1 50 True (100,20,200) '''

上面是一些常用的特殊方法,其他的应该找文档就行。一个道理。


关于序列化(json)

简单的序列化

import json def SerializeToFile(d, filename): with open(filename, 'w') as f: json.dump(d, f) def UnSerializeFromFile(filename): with open(filename, 'r') as f: info = json.load(f) return info def main(): d = {'name': 'Bob', 'age': 20, 'score': 88} filename = 'dump.txt' SerializeToFile(d, filename) print(UnSerializeFromFile(filename)) if __name__ == '__main__': main() ''' 输出>> {'name': 'Bob', 'age': 20, 'score': 88} '''

使用 load 和 dump,用于 json 和 python 各个类型的转换

定制序列化

import json class A(object): def __init__(self, name, age, score): self.name = name self.age = age self.score = score def __str__(self): return 'Name:%s Age:%s Score:%s' % (self.name, self.age, self.score) def SerializeToFile(d, filename): with open(filename, 'w') as f: json.dump(d, f, default= lambda obj: obj.__dict__) def UnSerializeFromFile(filename): with open(filename, 'r') as f: info = json.load(f, object_hook=DictToObject) return info def DictToObject(d): return A(d['name'], d['age'], d['score']) def main(): d = A('Bob', 20, 88) filename = 'dump.txt' SerializeToFile(d, filename) obj = UnSerializeFromFile(filename) print("%r\n%s" % (obj, obj)) if __name__ == '__main__': main() ''' 输出>> <__main__.A object at 0x0000020438E193C8> Name:Bob Age:20 Score:88 '''

序列化时写 default,参数是一个函数,说明对象转换 dict(也可以用别的)的方法,用 lambda 简单,而且可以覆盖任意类实例。

反序列化写 object_hook,本例中,参数需要说明 dict 转换对象的方法,因为类不统一,所以转换的方法不统一,使用 DictToObject 函数封装。

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...