首先需要说明,从本书得到很多启示,下面的补充属于讨论和思考的范畴。
关于多变量赋值的描述
原书第180页,第五章5.2.1.2中描述
a,b = b, a+b
的等价代码是
a = b
b = a + b
这段代码只能说是意会,但不准确,也不能用于实际编程。
a =1
b = 2
a,b = b, a+b
print(a,b)
aa = 1
bb = 2
aa = bb
bb = aa +bb
print(aa,bb)
c = 1
d =2
e = c
c = d
d = e + d
print(c,d)
运行结果
2 3
2 4
2 3
也就是说,a,b = b, a+b的好处不止在于两行变一行,而且是节省了一个中间变量。所以 c,d,e的代码才是反映了真正等价关系的代码。
第2章 图2-16的另一种思考
alist = [1,3,3,5,7,7]
adict = {k:1 for k in alist}
print(list(adict))
运行结果
[1, 3, 5, 7]
第2章 2.6的第4个思考题的参考
names = ['bob','Bob','TOM','tom','Tom']
aset = [n.lower().title() for n in names]
print(list(set(aset)))
运行结果
[‘Bob’, ‘Tom’]
第2章 2.6最后一个思考的参考
names = ['bob','Bob','TOM','tom','Tom']
adict = {}
for k in names:
adict[k.lower().title()] = adict.get(k.lower().title(),0) +1
print(adict)
运行结果
{‘Bob’: 2, ‘Tom’: 3}