第五章自定义序列类

1.序列类型的分类

  • 容器序列(元素类型可以不同):list、tuple、deque
  • 扁平序列(元素类型必须相同):str、bytes、bytearray、array.array
  • 可变序列(序列内容可以修改):list、deque、bytearray、array
  • 不可变(序列内容不可以修改):str、tuple、bytes

2.序列的abc继承关系

  • Sequence就是不可变序列的方法集合的抽象基类
  • MutableSequence是集合了可变序列的方法和协议的抽象基类。

3.序列的+、+=和extend的区别

  • +:加号两边都是相同的类型,并且返回一个新的对象
  • +=:右侧只要是一个可迭代类型即可,不会返回一个新对象
    • +=内部调用魔法函数__iadd__,__iadd__内部调用extend函数遍历添加的对象放入左侧对象中

补充:extend和append函数区别

  • extend:遍历元素一个一个放入其中
  • append:直接放入其中变成嵌套
 1 a = [1, 2]
 2 c = a + [3, 4]  # +:只能相同类型,产生新对象
 3 print(c)        # [1, 2, 3, 4]
 4 
 5 a += (3, 4)  # +=:可以不同类型
 6 print(a)     # [1, 2, 3, 4]
 7 
 8 b = [10, 11]
 9 b.extend((13, 14))
10 print(b)    # [10, 11, 13, 14]
11 
12 b.append((1, 2))
13 print(b)    # [10, 11, 13, 14, (1, 2)]

4.实现可切片的对象

5.bisect管理可排序序列

6.什么时候我们不该用列表

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

猜你喜欢

转载自www.cnblogs.com/zhihaospace/p/12075620.html