第二次读Fluent Python了,记得第一次读的时候总有醍醐灌顶的感觉,但迫于当时刚接触python不久,且没有做读书笔记,所以只是看的时候觉得这本书很好,看过就忘了。第二次读,特意买了纸质版,打算将读书过程中的感想、思考都记录下来,以供他人以及未来的自己参考。

第二章 An Array of Sequences

  • Pg46: 借用二分搜索来实现多重条件判断,这样的操作值得借鉴:
1
2
3
def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
i = bisect.bisect(breakpoints, score)
return grades[i]
  • Pg48: 大量数值的读写以及相关操作最好使用针对数值优化的array而不是list

  • Pg51: 大量数据的复制可以借助memoryview

第三章 Dictionaries and Sets

  • Pg70: 在使用dict的过程中,因为很多时候难以确定key是否在dict中存在,因此会先利用get方法取key对应的value,在对value进行一些操作之后再update dict,这样的操作会显得很琐碎,很多时候可以借助dict.setdefault()方法来完成上述一系列操作。
1
2
3
4
5
6
7
8
9
>>> dt = dict(one=1, two=2)
>>> dt.setdefault('three', 0)
0
>>> dt.update({'three': dt.setdefault('three', 0) + 3})
>>> dt
{'one': 1, 'two': 2, 'three': 3}
>>> dt.update({'one': dt.setdefault('one', 0) + 3})
>>> dt
{'one': 4, 'two': 2, 'three': 3}
  • Pg70: 在dict上做一些操作时,很多时候我们希望直接利用[key]形式取值时不产生KeyError,为了解决这个问题,有两种方案;一种是借用defaultDict,另一种则是继承dict类并自己实现missing方法

  • Pg78: python标准库中并没有提供只读的dict,但是可以借用types中的MappingProxyType来实现相关功能,但需要注意的是MappingProxyType实例会随着传递进来的dict改变而改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> from types import MappingProxyType
>>> d = {1: 'A'}
>>> d_proxy = MappingProxyType(d)
>>> d_proxy
mappingproxy({1: 'A'})
>>> d_proxy[1]
'A'
>>> d_proxy[2] = 'x'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'mappingproxy' object does not support item assignment
'mappingproxy' object does not support item assignment
>>> d[2] = 'B'
>>> d_proxy
mappingproxy({1: 'A', 2: 'B'})
>>> d_proxy[2]
'B'