Python高能小技巧:用海象操作符减少重复代码( 三 )


Python新手还会遇到一个困难,就是缺少do/while循环结构 。例如,我们要把新来的水果做成果汁并且装到瓶子里面,直到水果用完为止 。下面先用普通的while循环来实现:
FRUIT_TO_PICK = [    {'apple': 1, 'banana': 3},    {'lemon': 2, 'lime': 5},    {'orange': 3, 'melon': 2},]def pick_fruit():    if FRUIT_TO_PICK:        return FRUIT_TO_PICK.pop(0)    else:        return []def make_juice(fruit, count):    return [(fruit, count)]bottles = []fresh_fruit = pick_fruit()while fresh_fruit:    for fruit, count in fresh_fruit.items():        batch = make_juice(fruit, count)        bottles.extend(batch)    fresh_fruit = pick_fruit()print(bottles)这种写法必须把fresh_fruit = pick_fruit()写两次,第一次是在进入while循环之前,因为我们要给fresh_fruit设定初始值,第二次是在while循环体的末尾,因为我们得把下一轮需要处理的水果列表填充到fresh_fruit里面 。
如果想复用这行代码,可以考虑loop-and-a-half 模式 。这个模式虽然能消除重复,但是会让while循环看起来很笨,因为它成了无限循环,程序只能通过break语句跳出这个循环 。
FRUIT_TO_PICK = [    {'apple': 1, 'banana': 3},    {'lemon': 2, 'lime': 5},    {'orange': 3, 'melon': 2},]bottles = []while True:                     # Loop    fresh_fruit = pick_fruit()    if not fresh_fruit:         # And a half        break    for fruit, count in fresh_fruit.items():        batch = make_juice(fruit, count)        bottles.extend(batch)print(bottles)有了海象操作符,就不需要使用loop-and-a-half模式了,我们可以在每轮循环的开头给fresh_fruit变量赋值,并根据变量的值来决定要不要继续循环 。这个写法简单易读,所以应该成为首选方案 。
FRUIT_TO_PICK = [    {'apple': 1, 'banana': 3},    {'lemon': 2, 'lime': 5},    {'orange': 3, 'melon': 2},]bottles = []while fresh_fruit := pick_fruit():    for fruit, count in fresh_fruit.items():        batch = make_juice(fruit, count)        bottles.extend(batch)print(bottles)在其他一些场合,赋值表达式也能缩减重复代码 。总之,如果某个表达式或赋值操作多次出现在一组代码里面,那就可以考虑用赋值表达式把这段代码改得简单一些 。
要点

  • 赋值表达式通过海象操作符(:=)给变量赋值,并且让这个值成为这条表达式的结果,于是,我们可以利用这项特性来缩减代码 。
  • 如果赋值表达式是大表达式里的一部分,就得用一对括号把它括起来 。
  • 虽说Python不支持switch/case与do/while结构,但可以利用赋值表达式清晰地模拟出这种逻辑 。
关于作者:布雷特·斯拉特金(Brett Slatkin),google首席软件工程师,他是Google Surveys的联合技术创始人,也是PubSubHubbub协议的共同创造者之一 。此外,Slatkin还发布了Google的第一个云计算产品——App Engine 。早在15年前,Slatkin就开始在工作中使用Python管理Google大量的服务器群 。他拥有纽约哥伦比亚大学计算机工程专业学士学位 。
本文摘编自《Effective Python:编写高质量Python代码的90个有效方法》(原书第2版),经出版方授权发布 。




推荐阅读