python高效59则(Effective Python)-第一

2019-01-15  本文已影响0人  鼻子两个孔
读《Effective Python》的记录
  1. 确认合适的版本,优先考虑python3
  2. 遵循PEP9风格指南
  1. bytes、str和unicode。
  1. 使用函数来代替复杂的表达式
  2. 切片(slice)
  1. 单次切片操作,不要同时指定start,end和stride。
  1. 用列表来替代map和filter
  1. 不要使用两个或以上表达式来列表推导,超过两个表达式的列表推导很难理解,要避免
  2. 用生成器表达式来改写数据量较大的列表推导
  1. 用enumerate取代range。如果需要知道列表中的索引,可以用获取list长度后使用range。而enumerate可以把各种迭代器包装为生成器,循环下标.
flavor_list = ["a","b","c","d","e"]
# 使用range
for i in range(len(flavor_list)):
    flavor = flavor_list[i]
    print('%d,%s'%(i,flavor)
    
# 使用enumerate
for i,flavor in enumerate(flavor_list):
    print('%d,%s'%(i,flavor)
    
# enumerate还提供第二个参数,指定开始计数时的值(默认为0)
for i,flavor in enumerate(flavor_list,1):
    print('%d,%s'%(i,flavor)
  1. 用zip函数同时遍历两个迭代器。对于相关联的两个list
names = ["Karry","Roy","Jackson"]
letters = [len(n) for n in names]
longest_name = None
max_letters = 0
# 平行迭代两个list
for i in range(len(names)):
    count = letter[i]
    if count > max_letters:
        longest_name = names[i]
        max_letters = count
print(longest_name)

# 使用enumerate
for i,name in enumerate(names):
    count = letter[i]
    if count > max_letters:
        longest_name = names[i]
        max_letters = count
        
# 使用内置的zip函数
for name,count in zip(names,letters):
    if count > max_letters:
        longest_name = names
        max_letters = count
  1. 不要在for和while循环后写else,既不直观又容易让人误解
  2. 合理利用try/except/else/finally结构中的每个代码块
上一篇下一篇

猜你喜欢

热点阅读