#================================================================
# 4. 用辅助函数来取代复杂的表达式
#----------------------------------------------------------------
# 少写那些复杂且难以理解的单行表达式 不利于维护
#----------------------------------------------------------------


#================================================================
# 7. 用列表推导(list comprehension)来取代map、filter
#----------------------------------------------------------------
# a = [1,2,3,4,5,6,7,8,9,10]
# squares_list = [x**2 for x in a] # list comprehension
# print(squares_list)
# # 若使用map 就要创建lambda函数
# squares_map = list(map(lambda x: x**2, a)) # map 复杂
# print(squares_map)

# even_squares_list = [x**2 for x in a if x % 2 == 0]
# print(even_squares_list)
# # 若使用map 就要创建lambda函数 和filter筛选
# alt = list(map(lambda x:x**2, filter(lambda x:x%2==0, a))) # map+filter 复杂
# print(alt)

# # 字典(dict)与集(set)也有和列表类似的推导机制
# chile_ranks = {'ghost':1, 'haha':2, 'xixi':3}
# rank_dict = {rank: name for name,rank in chile_ranks.items()}
# print(rank_dict)
# chile_len_set = {len(name) for name in rank_dict.values()}
# print(chile_len_set)

#----------------------------------------------------------------


#================================================================
# 8. 不要使用含有两个以上表达式的列表推导
#----------------------------------------------------------------

#----------------------------------------------------------------


#================================================================
# 9. 用生成器表达式来改写数据量较大的列表推导
#----------------------------------------------------------------
# 数据大，列表推导占内存多
# 生成器表达式所返回的迭代器 可以逐次输出值 避免内存用量问题
#----------------------------------------------------------------
# it = (len(x) for x in open('my_file.txt'))
# # for i in it:
# # 	print(i)
# roots = ((x,x**0.5) for x in it)
# print(next(roots))

#================================================================
# 10. 尽量用enumerate取代range
#----------------------------------------------------------------
# # enumerate函数 可以把各种迭代器包装成生成器 以便稍后产生输出值
# # 生成器没词产生一对输出值 前者表示循环下标 后者表示从迭代器中获取到的下一个序列元素
# color_list = ['red','green','yellow','blue']
# for i, color in enumerate(color_list): # 默认从0开始计数
# 	print('%d:%s' % (i+1, color))

# for i, color in enumerate(color_list, 1):
# 	print('%d:%s' % (i, color))	

#----------------------------------------------------------------


#================================================================
# 11. 用zip函数同时遍历两个迭代器
#----------------------------------------------------------------
# zip函数可以把两个或两个以上的迭代器封装为生成器, 有一个耗尽就停止
# names = ["AAAAAAAAAAAA","BBBB","CC"]
# letters = [len(n) for n in names]
# max_letters = 0
# for name, count in zip(names, letters):
# 	if count > max_letters:
# 		longest_name = name
# 		max_letters = count
# print(longest_name)

#----------------------------------------------------------------


#================================================================
# 12. 不要在for和while循环后面写else块
#----------------------------------------------------------------

#----------------------------------------------------------------


#================================================================
# 13. 合理利用 try/except/else/finally结构中的每个快的代码
#----------------------------------------------------------------
# else块 如果try块没有发生异常，那么就执行else块
# else块 可以用来缩减try块中的代码量，把没有发生异常时要执行的语句与try/except代码隔开
#----------------------------------------------------------------

