目录
1. 实例方法、类方法和静态方法
- Python在使用点语法调用静态方法时不会传入self或者cls参数,从而限制了静态方法访问的内容。
- 使用@classmethod定义的类方法可以创建工厂函数,如果将来类重命名,就不用变更工厂方法中的构造函数名称。
2. 字典(也称为映射、散列表、查找表、关联数组)
- OrderedDict能记住键的插入顺序
import collections
collections.OrderedDict(one=1, two=2, three=3)
- 通过Key访问dict,当Key不存在时,会引发‘KeyError’异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。
import collections
dd = collections.defaultdict(list)
dd['dogs'].append('Rufus')
如果使用原始dict,在使用dd['dogs'].append()时会出现异常。
- ChainMap:可以将多个dict整合到一个map中,查找时逐个查找底层map,直到找到一个符合条件的键。对ChainMap进行插入、更新和删除操作,只会作用于其中第一个map
>>> from collections import ChainMap
>>> dict1 = {'one':1, 'two':2}
>>> dict2 = {'three':3, 'four':4}
>>> chain = ChainMap(dict1, dict2)
>>> chain
ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4})
>>> chain['three']
3
>>> chain['one']
1
>>> chain['missing']
KeyError: 'missing'
>>>
- type.MappingProxyType(Python3.3+):用于创建只读字典。比如说,如果希望返回一个字典表示类或者模块的内部状态,同时禁止向该对象写入内容,此时就可以使用MappingProxyType。
>>> from types import MappingProxyType
>>> writable = {'one':1, 'two':2}
>>> read_only = MappingProxyType(writable)
>>> read_only['one']
1
# 代理是只读的
>>> read_only['one'] = 23
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment
# 更新原字典也会影响代理
>>> writable['one'] = 42
>>> read_only
mappingproxy({'one': 42, 'two': 2})
3. 数组数据结构
- array.array是单一类型的可变数组,原型:array.array(typecode, [initializer]),typecode表示元素类型,可通过array.typecodes查看所有类型
- str是含有unicode字符的不可变数组
- bytes是含有单字节的不可变数组,元素为[0,255]之间的整数。
>>> arr = bytes((0, 1, 2, 3))
>>> arr[1]
1
>>> arr
b'\x00\x01\x02\x03'
>>> bytes((0, 300))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: bytes must be in range(0, 256)
>>> arr[1] = 23
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bytes' object does not support item assignment
>>> del arr[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bytes' object doesn't support item deletion
>>>
- bytearray是含有单字节的可变数组
4. 记录、结构体和纯数据对象
- typing.NamedTuple:相比于colletions.namedtuple,typing.NamedTuple的主要特点在于用新语法来定义记录类型并支持类型注解。(详细例子见书P98)
- struct.Struct:不太明白具体有什么用,后面了解了再更新