0
点赞
收藏
分享

微信扫一扫

【Python】07 《Effective Python》读书笔记

2022年1月份,寒假在家,从市图书馆借了Brett Slatkin的《Effective Python》(机械工业出版社,2016),记录下我认为有用的方法。

第1章 用Pythonic方式来思考

第7条 用列表推导来取代 map 和 filter

列表推导可以根据一份列表来制作另外一份。例如,要用列表中每个元素的平方值构建另一份列表。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squares = [x**2 for x in a]
print(squares)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

字典和集合也支持推导表达式。

chile_ranks ={'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dict = {rank : name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dict.values()}
print(rank_dict)
print(chile_len_set)

>>>
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
{8, 5, 7}

第10条 尽量用 enumerate 取代 range

当迭代列表的时候,通常还想知道当前元素在列表中的索引。例如,要按照喜好程度打印出自己爱吃的冰淇淋口味。enumerate的第二个参数指定开始计数时所用的值,默认为0。

flavor_list = ['vanilla', 'chocolate', 'pecan', 'strawberry']
for i, flavor in enumerate(flavor_list, 1):
	print('%d: %s' % (i, flavor))

>>>
1: vanilla
2: chocolate
3: pecan
4: strawberry

第11条 用 zip 函数同时遍历两个迭代器

通过列表推导,很容易就能根据某个表达式从源列表推算出一份派生列表。如果想平行地迭代两份列表,可以使用zip函数,把两个或两个以上的迭代器封装成生成器,以便稍后求值。

names =  ['Cecilia', 'Lise', 'Marie']
letters = [len(n) for n in names]

for name, count in zip(names, letters):
	if count > max_letters:
		longest_name = name
		max_letters = count

第2章 函数

读了本章和后续章节后,发现难度较大,看不太懂,就不做记录了。
Python支持面向对象,也有类和继承的概念。对并行计算的支持似乎不好。

举报

相关推荐

0 条评论