Python|Python核心技术——循环与迭代是编程的基本功( 二 )


比如 , 给定两个字典 , 分别是产品名称到价格的映射 , 和产品名称到颜色列表的映射 。 我们要找出价格小于 10 , 并且颜色不是红色的所有产品名称和颜色的组合 。 如果不用 continue , 代码应该是下面这样的:


  • # name_price: 产品名称 (str) 到价格 (int) 的映射字典# name_color: 产品名字 (str) 到颜色 (list of str) 的映射字典name_price={'A':10'B':9\"C\":11name_color={'A':'红''B':\"黄\"\"C\":\"蓝\"for name price in name_price.items():if price < 10:if name in name_color:for color in name_color[name
    :if color != '红':('name: { color: {'.format(name color))else:print('name: { color: {'.format(name 'None'))
  • name: B color: 黄
而加入 continue 后 , 代码显然清晰了很多:

  • # name_price: 产品名称 (str) 到价格 (int) 的映射字典# name_color: 产品名字 (str) 到颜色 (list of str) 的映射字典name_price={'A':10'B':9\"C\":11name_color={'A':'红''B':\"黄\"\"C\":\"蓝\"for name price in name_price.items():if price >= 10:continueif name not in name_color:print('name: { color: {'.format(name 'None'))continuefor color in name_color[name
    :if color == '红':continueprint('name: { color: {'.format(name color))
  • name: B color: 黄
我们可以看到 , 按照第一个版本的写法 , 从开始一直到打印输出符合条件的产品名称和颜色 , 共有 5 层 for 或者 if 的嵌套;但第二个版本加入了 continue 后 , 只有 3 层嵌套 。
显然 , 如果代码中出现嵌套里还有嵌套的情况 , 代码便会变得非常冗余、难读 , 也不利于后续的调试、修改 。 因此 , 我们要尽量避免这种多层嵌套的情况 。
小结
  • 在 for 循环中 , 如果需要同时访问索引和元素 , 你可以使用 enumerate() 函数来简化代码 。
  • 写条件与循环时 , 合理利用 continue 或者 break 来避免复杂的嵌套 , 是十分重要的 。

Python核心技术系列
Python核心技术——重新定义列表和元组
Python核心技术——重新认识字典和集合
Python核心技术——重新认识字符串
Python核心技术——JSON 序列化与实战
Python核心技术——输入和输出的秘密
Python核心技术——条件分支控制流
Python核心技术——异常处理与实战