python数据模型

特殊方法

如何使用特殊方法

特殊方法的存在是为了被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 不会允许你在数组里存除指定类型之外的数据。
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)
上一篇:逆向分析学习 - 恢复 Struct


下一篇:GD32系列总结 - systick介绍及使用