不,Python不直接支持redo。有一个选项可能会让嵌套循环变得非常糟糕,比如:for x in mylist:

while True:

...

if shouldredo:

continue # continue becomes equivalent to redo

...

if shouldcontinue:

break # break now equivalent to continue on outer "real" loop

...

break # Terminate inner loop any time we don't redo

但这意味着,在“redoable”块中,不诉诸异常、标记变量或将整个东西打包为函数,就不可能break使用外部循环。

或者,使用一个直接的while循环来复制for循环为您做的事情,显式地创建和推进迭代器。它有自己的问题(continue实际上是redo默认情况下,您必须显式地为“real”continue推进迭代器),但它们并不可怕(只要您使用continue注释,以表明您打算redo对continue,以避免混淆维护者)。要允许redo和其他循环操作,您需要执行以下操作:# Create guaranteed unique sentinel (can't use None since iterator might produce None)

sentinel = object()

iterobj = iter(mylist) # Explicitly get iterator from iterable (for does this implicitly)

x = next(iterobj, sentinel) # Get next object or sentinel

while x is not sentinel: # Keep going until we exhaust iterator

...

if shouldredo:

continue

...

if shouldcontinue:

x = next(iterobj, sentinel) # Explicitly advance loop for continue case

continue

...

if shouldbreak:

break

...

# Advance loop

x = next(iterobj, sentinel)

上面的操作也可以用try/except StopIteration:来完成,而不是用一个sentinel来包装两个参数next,但是用它来包装整个循环可能会有其他StopIteration源被捕获的风险,并且在一个有限的范围内对内部和外部的next调用都正确地执行这一操作会非常难看(比基于sentinel的方法更糟糕)。

python循环迭代_Python中循环迭代的重做相关推荐

  1. python中for循环流程图_Python中的迭代遍历 for in

    遍历就是从头到尾依次从列表中获取数据,在循环体内部针对每一个元素,执行相同的操作. 在Python中为了提高列表的遍历效率,专门提供的迭代(iteration)遍历. 使用 for...in 就能够在 ...

  2. python中迭代_python中的迭代什么意思

    python中的迭代什么意思 发布时间:2020-09-21 12:33:45 来源:亿速云 阅读:67 作者:Leah 这期内容当中小编将会给大家带来有关python中的迭代什么意思,文章内容丰富且 ...

  3. python反向迭代器_Python中对象迭代与反迭代的技巧总结

    一.如何实现可迭代对象和迭代器对象? 实际案例 某软件要求从网络抓取各个城市气味信息,并其次显示: 北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ...... 如果一次抓取所 ...

  4. python可迭代_python中可迭代对象有哪些

    Python中的可迭代对象有哪些?Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象:from collections import Iter ...

  5. python 元组遍历_Python中的for循环:元组、列表、字典的遍历和相互转化

    Python for循环可以遍历任何序列的项目,如列表.字符串.元组.字典.集合等序列类型. 语法: for循环的语法格式如下: for iterating_var in sequence:state ...

  6. java循环遍历_JAVA中循环遍历list有三种方式

    转自:https://blog.csdn.net/changjizhi1212/article/details/81036509 JAVA中循环遍历list有三种方式for循环.增强for循环(也就是 ...

  7. python生成器迭代_python中的生成器和迭代器

    前言: 我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. 定义: 生成器和迭代器 通过列表生成式,我们可以直接创建一个列 ...

  8. python 可迭代对象是什么_python中可迭代对象指的是什么

    python中可迭代对象指的是什么 发布时间:2020-07-20 11:19:38 来源:亿速云 阅读:91 作者:清晨 小编给大家分享一下python中可迭代对象指的是什么,相信大部分人都还不怎么 ...

  9. python中可迭代对象是什么意思_python中可迭代对象是什么

    python中可迭代对象是:存储了元素的一个容器对象,且容器中的元素可以通过"__iter__( )"方法或"__getitem__( )"方法访问.可迭代对象 ...

最新文章

  1. cas+shiro+spring 单点登录
  2. 线程及同步的性能 – 线程池/ ThreadPoolExecutors/ ForkJoinPool
  3. java 文件 剪切_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇
  4. 用Backbone.js创建一个联系人管理系统(一)
  5. BUG总结——记一次sql查询未按照想要的次序返回
  6. 窗体控件绑定数组 c# 1613698204
  7. 3003 基于二叉链表的二叉树左右节点的交换 附思路
  8. .NET_.NET Copy Web 部署概念_01-3
  9. CN笔记:第二章 物理层
  10. 微软面试4、在二元树中找出和为某一值的所有路径
  11. 网络_远程开机(ubuntu)
  12. 现代通信技术之分组交换技术
  13. 【Axure原型分享】自动编号的中继器表格
  14. 漂亮得不像触控板,全新 Magic Trackpad 2
  15. 【单片机小白屑作】基于清翔QX-MCS51单片机的精简版定时炸弹
  16. java安装_Java开发人员应该知道的7种新工具
  17. JAVA :一张纸厚0.5mm //0.0005m,折叠多少次,厚度会超过珠穆朗玛峰?(8848.43m)
  18. 阿里免费网盘teambition使用初体验
  19. rsync 错误排除与修复
  20. 16. FizzBuzz

热门文章

  1. 线程和std::shared_ptr智能指针使用
  2. SLS控制台内嵌操作指南
  3. 作为后端开发如何设计数据库系列文章 设计SaaS系统表结构
  4. 谁顶住双11的世界级流量洪峰?神龙架构负责人等9位大牛现场拆解阿里秘籍
  5. QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法
  6. 【SpringCloud-Alibaba系列教程】14.一文教你入门RocketMQ
  7. JetBrains发布两项重要更新:基于IDE的远程开发解决方案、轻量级编辑器Fleet
  8. 全球企业KVM开源贡献榜发布,腾讯云、华为、阿里巴巴等入围
  9. 华为庞鑫:闪存3.0时代,四大变化激发全闪存数据中心潜能释放
  10. VMware为全球数字化基础架构提供原生安全