【读书笔记】深入理解Python特性(四)

目录

1. 实例方法、类方法和静态方法

2. 字典(也称为映射、散列表、查找表、关联数组)

3. 数组数据结构

4. 记录、结构体和纯数据对象


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:不太明白具体有什么用,后面了解了再更新

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值