流畅的Python,Fluent Python,书中错误记录。
书p129页,示例5-15
def clip(text:str, max_len:'int' =8) -> str: ''' :param text: 在max_len前面或后面的第一个空格处截断文本 ''' end = None if len(text) > max_len: space_before = text.rfind(' ', 0, max_len) # 从右向左找,rfind,对应max_len前面的第一个空格 if space_before >= 0: end = space_before else: space_after = text.find(' ', max_len) # 找max_len的后面了 if space_after >= 0: end = space_after if end is None: # 没有找到,很聪明定义了一个None的开关 end = len(text) return text[:end].rstrip()
if space_after >= 0: end = space_after
缩进错误。
p566页,示例A.2
import sys MAX_BITS = len(format(sys.maxsize, 'b')) # 确定位数,我是64位 print('%s-bit Python build' % (MAX_BITS + 1)) def hash_diff(o1, o2): h1 = '{:0>{}b}'.format(hash(o1), MAX_BITS) # 取出哈希值,用2进制格式化输出,右对齐,空位用0填充 # print(h1) h2 = '{:>0{}b}'.format(hash(o2), MAX_BITS) # print(h2) diff = ''.join('|' if b1 != b2 else ' ' for b1, b2 in zip(h1, h2)) # 通过zip压缩循环取值,对比是否相等 # print(diff) 相等留空,不想等划线 count = '|={}'.format(diff.count('|')) # 统计不想等的个数 width = max(len(repr(o1)), len((repr(o2))), 8) # 确定起头的宽度 # print(width) sep = '-' * (width * 2 + MAX_BITS) # 最后的过度线, # print(sep) return '{!r:{width}}=>{}\n {}{:{width}} {} \n{!r:{width}}=>{}\n{}'.format( o1, h1, ' ' * (width), diff, count, o2, h2, sep, width=width) # 这个格式化最骚,首先标题订宽度用width,接着输入原始数字o1,=>输出哈希值,第二行输出|竖线,后面输出不同的数量 # 第三排逻辑跟第一排一样,最后换行输出------线,这个太骚的格式化输出了 if __name__ == '__main__': print(hash_diff(1,True)) print(hash_diff(1, 1.01)) print(hash_diff(1.0, 1)) print(hash_diff('a', 'A')) print(hash_diff('a1', 'a2')) print(hash_diff('sidian', 'sidian'))
return '{!r:{width}}=>{}\n {}{:{width}} {} \n{!r:{width}}=>{}\n{}'.format( o1, h1, ' ' * (width), diff, count, o2, h2, sep, width=width)
return的格式化输出中多了一个{}
书P196-197页,示例8-17,代码在shell运行不正确:
import weakref In [214]: a_set = {0, 1} In [215]: wref = weakref.ref(a_set) In [216]: wref Out[216]: <weakref at 0x107c0a290; to 'set' at 0x107f4c410> In [217]: wref() Out[217]: {0, 1} In [218]: a_set = {2, 3, 4} In [219]: wref() Out[219]: {0, 1} In [220]: wref() is None Out[220]: False In [221]: wref() is None Out[221]: False
原因是执行了wref(),对象{0, 1}上面的变量标签迅速上涨,但在Py文件可以运行。
为什么具体上涨,水平有限,无法解释。
该链接有具体实例:https://www.cnblogs.com/sidianok/p/12094479.html
p566页,示例A.3
memtest.py中的代码:
else: print('Usage: {} < vector - module - to - test>'.format('XXX.py')) sys.exit(1)
书中format内容为空,报错。