特殊方法
如何使用特殊方法
特殊方法的存在是为了被Python解释器调用的,你自己不需要调用
-
自定义类型:len(myObject)执行时,Python会自动调用由你实现的__len__方法
-
内置类型(list、str…):__len__会直接返回PyVarObject里的ob_size属性,完全不会调用任何方法。PyVarObject表示内存中长度可变的内置对象的C语言结构体
__repr__ 和 __str__ 的区别
都是字符串表示形式
-
前者方便调试和记录日志
-
后者是在str()函数被使用,或在用print函数打印一个对象时才被调用,它返回的字符串对终端用户更友好
数据结构
数组
Python 数组跟 C 语言数组一样精简。创建数组需要一个类型码,这个类型码用来表示在底层的 C 语言应该存放怎样的数据类型。比如 b 类型码代表的是有符号的字符(signedchar),因此 array(‘b’) 创建出的数组就只能存放一个字节大小的整数,范围从 -128 到127,这样在序列很大的时候,我们能节省很多空间。而且 Python 不会允许你在数组里存除指定类型之外的数据。
# 创建一个有 1000 万个随机浮点数的数组
from array import array
from random import random
floats = array('d', (random() for i in range(10**7)))
双向队列
collections.deque 类(双向队列)是一个线程安全、可以快速从两端添加或者删除元素的
数据类型。而且如果想要有一种数据类型来存放“最近用到的几个元素”,deque 也是一个
很好的选择。
>>> from collections import deque
>>> dq = deque(range(10), maxlen=10)
>>> dq
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
>>> dq.rotate(3)
>>> dq
deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
>>> dq.rotate(-4)
>>> dq
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
>>> dq.appendleft(-1)
>>> dq
deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
>>> dq.extend([11, 22, 33])
>>> dq
deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10)
>>> dq.extendleft([10, 20, 30, 40])
>>> dq
deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)