古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。

Python高级编程和异步I/O并发编程笔记 4 自定义序列类

Python admin 370℃ 0评论

序列类型的分类

序列协议是python中一个重要的协议,序列类就是实现了序列协议的类,可以遍历。

序列类型按照存储数据的类型分类:容器序列(list、tuple、deque);扁平序列(str、bytes、bytearray、array.array)。按照序列是否可变可以划分为可变序列(list、deque、bytearray、array);不可变序列(str、tuple、bytes)。容器序列和扁平序列的区别在于前者可以放置任意类型,后者不是。

序列的abc继承关系

list中extend方法的区别(+、+=和extend)

实现可切片的对象

如上所示,python的切片功能非常强大,我们在开发中也可以实现可以进行切片操作的对象,问题的关键是实现“__getitem__”这个魔法函数,对照上面的序列类型,我们也可以实现所有的Sequence或MutableSequence中的魔法方法,典型的例子就是django中的queryset。

bisect维护已排序序列

bisect模块是用来处理已排序(升序)的序列,其中包含insort和bisect两类操作,前者是插入操作,后者是查找操作。如果在开发中,遇到数据量很大需要维护一个排序的序列,而不是都插入后再行排序,就可以使用该模块,一方面是其能够维护排序,另一方面是该模块使用了“二分查找”算法性能很高。

什么时候我们不使用列表?

列表是日常开发中使用最多的数据结果,但是某些情况下 ,我们可以不使用或者应该使用其他内置的数据结构,如array、deque等,在数据处理或算法应用中,array的效率和性能比list要高很多。array即C语言中的数组,存储为连续的内存空间,python的list类型也是使用C语言实现的,两者的一个重要区别是,array只能存放指定的数据类型,array在声明时需要以参数的形式指明数组的类型,具体的参数列表可以在array的文档中查看。

列表推导式、生成器表达式、字典推导式

列表推导式(又叫列表生成式)是指用一行代码生成列表,由于其逻辑清晰,功能强大,所以很多情况下可以用来取代map()、reduce()、filter(),同时需要注意的是列表生成式的性能是高于列表操作的,但在代码逻辑很复杂的情况下,不推荐使用,会降低代码的可读性。

生成器表达式

将上例中的列表生成式的方括号改为圆括号,就会变成一个生成器,可以使用for循环打印出来,同时list()初始化可以接收一个可迭代的对象,所以该生成器可以用来直接转化为列表。

字典推导式

集合推导式

转载请注明:北凉柿子 » Python高级编程和异步I/O并发编程笔记 4 自定义序列类

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址