你能跳到循环中的第n次迭代吗?

2023-12-09

42 -> for i in range(n):
43       foo(i)

我现在正在 pdb 会话中。我想跳到循环迭代i = k, 无需评估foo(i) for i < k,然后继续评估foo(i) for i > k。如果我向前迈出一步

42    for i in range(n):
43 ->    foo(i)

set i = k, and continue, then i在下一次迭代时返回到 1。我可以让它去吗k + 1反而?


你不能“向前跳”和向后跳,不。您只能按照编写的方式执行循环;进行迭代k you'll have完成所有中间步骤。这是因为 Python 无法知道状态是否会在迭代之间发生根本改变,因此您不能直接决定跳过迭代。

您始终可以在上下文中执行单个表达式。你可以运行foo(k)并观察返回值。您甚至可以操纵很多状态。您只是无法访问所使用的迭代器对象for向前跳过。

如果更改被测代码before运行调试器是一个选项,您可以与for loop:

r = range(n)
it = iter(r)
for i in it:
    foo(i)

现在你could进步it到稍后的时间点(与next(it), 例如)。问题是你不能像这样倒回迭代器。

下一步是生成一个自定义迭代器can倒带:

class ControllableIterator(object):
    def __init__(self, sequence):
        self.pos = 0
        self.seq = sequence
    def __iter__(self): return self
    def next(self):
        try:
            val = self.seq[self.pos]
        except IndexError:
            raise StopIteration
        self.pos += 1
        return val
    __next__ = next  # Python 3

并使用它:

r = range(n)
it = ControllableIterator(r)
for i in it:
    foo(i)

在这里你可以设置it.pos到不同的值和for会很高兴地跟随。这仅适用于序列,不仅仅是任何可迭代的。

Demo:

$ bin/python test.py 
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(19)<module>()
-> r = range(100)
(Pdb) l
 14     
 15     def foo(i):
 16         print i
 17     
 18     import pdb; pdb.set_trace()
 19  -> r = range(100)
 20     it = ControllableIterator(r)
 21     for i in it:
 22         foo(i)
 23     
[EOF]
(Pdb) n
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(20)<module>()
-> it = ControllableIterator(r)
(Pdb) 
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(21)<module>()
-> for i in it:
(Pdb) 
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(22)<module>()
-> foo(i)
(Pdb) 
0
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(21)<module>()
-> for i in it:
(Pdb) 
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(22)<module>()
-> foo(i)
(Pdb) 
1
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(21)<module>()
-> for i in it:
(Pdb) it.pos = 50
(Pdb) n
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(22)<module>()
-> foo(i)
(Pdb) 
50
> /Users/mj/Development/venvs/stackoverflow-2.7/test.py(21)<module>()
-> for i in it:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能跳到循环中的第n次迭代吗? 的相关文章

随机推荐

  • 删除 pandas 数据框中未命名的列[重复]

    这个问题在这里已经有答案了 我有一个来自 A G 列的数据文件 如下所示 但是当我使用pd read csv data csv 它打印一个额外的unnamed无缘无故地列在最后 colA ColB colC colD colE colF c
  • 以编程方式在 IIS 中启用或禁用匿名身份验证

    我有一个 Web 应用程序 我需要为其用户提供将登录方法从 FormsAuth 切换到 WindowsAuth 的选项 我设法通过代码更改 web config 文件 Configuration config WebConfiguratio
  • 重用函数而无需实例化新类的最简单方法

    我目前有一个如下所示的函数 public void AnimateLayoutTransform object ControlToAnimate Does some stuff 我在很多不同的项目中使用这个函数 所以我希望它具有很强的可重用
  • 线程终止问题(C 编程)

    我正在开发一个使用 C 语言的 Linux 应用程序 它使用多个线程 由主函数生成的线程完成大部分工作 因此通常最后完成 我看到一些奇怪的行为 我相信这是由于主线程在生成的线程有机会完成其工作之前终止 下面是一些示例代码来说明我正在讨论的内
  • 详细订单中的 Woocommerce Short_Description

    我正在使用 Wordpress 和 Woocommerce 创建我的新网站 我想在订单详细信息中显示简短的描述 我找到了这段代码 add action woocommerce after shop loop item title wooco
  • 将设计添加到plotLabel Highcharts

    我正在制作 highchart 上的动态图表 我的问题是 有没有办法在我的绘图标签上添加设计 目前是这样的 我希望它看起来像这样 这是我的代码 function Highcharts setOptions global useUTC fal
  • Google App Engine + jQuery Ajax = 405 方法不允许

    必须有人能够解释我在这里做错了什么 我正在尝试创建最简单的 AJAX 发布到 Google App Engine 应用程序的示例 但我失败了 这是应用程序Python import cgi from google appengine api
  • 在 main 方法中使用 SwingUtilities.invokeLater()

    我最近看到一个MVC java应用程序 其中main方法编写为 public static void main String args SwingUtilities invokeLater new Runnable public void
  • Android:带有来自 attrs.xml 的对象引用的自定义视图,始终为 null

    我正在尝试设置对象之间的关系层次结构 每个对象都有一个与其自身类型相同的父对象 或者null 我有一个main xml其中包含其中一些
  • contenteditable div 内的 XY 插入坐标

    我正在寻找一种方法来获取 contenteditable div 内的插入符 x y 坐标 其方式与使用 window event 获取鼠标坐标类似 因为我需要在用户使用插入符的位置打开一个弹出窗口在 contenteditable div
  • 如何检查函数中多个变量中是否至少有一个等于 1?

    我有多个响应数据 这些数据已使用 cSplit e 分成单独的列 格式如下 ID Response IM2 IM4 IM10 IM16 1 1 4 7 10 NA 1 1 NA 2 2 7 5 16 8 NA NA NA 1 3 3 2 1
  • 使用 google fit api 的卡路里消耗

    我正在开发健身应用程序 为此我使用了 google fit api 到目前为止 我成功地获取了步数 距离 但无法获取卡路里消耗 提前致谢 您需要先设置用户的体重和身高 使用此信息计算消耗的卡路里 这些是我用来做到这一点的方法 mClient
  • 在Android中选择同一布局中的EditText时如何关注Webview?

    我一直在尝试在布局中添加 EditTexts 和 WebView 问题在于专注于 WebView 在决定再次询问之前 我尝试查看网络和 Stackoverflow 上的答案 在网络视图中 我有一些字段需要填写 这些字段是通过 POST 发送
  • 动态扩展 json 中的所有列表和记录

    我想展开 json 响应中的所有列表和记录 列就像例如 这是动态的 也可以是10条记录和5个列表 文本 文本 列表 列表 文本 记录 记录 字符串 记录 我编写了一个函数来获取具有特定类型的所有列 Cn GetAllColumnsWithT
  • 使用 PHP 解析带有命名空间的 SOAP XML 响应

    我有一个丑陋的 XML 上面有很多命名空间 当我尝试使用 simpleXML 加载它时 如果我指示第一个命名空间 我会得到一个 xml 对象 但后面带有其他命名空间的标签不会使其到达该对象 这是 SOAP 响应
  • JQuery 从远程站点加载内容

    我想使用 JQuery 从另一个网站加载内容 不幸的是 load 函数仅限于当前域 有什么办法吗 我想将导航栏直接插入到 tumblr 博客中 看一下规避同源策略的方法如果你能控制对方 那就很容易了 否则尝试雅虎YQL
  • Python:用另一个列表过滤列表的列表

    我正在尝试过滤一个列表 我想从列表 A 是列表的列表 中提取与它们键索引 0 匹配的元素 以及另一个列表 B 具有一系列值的元素 像这样 list a list list 1 list 5 list 8 list 14 list b lis
  • 架构中的内容模型不明确

    也许我盯着这个问题太久了 也许没有答案 不管怎样 我现在就在这里 我试图在 XSD 中允许一组可能的组合 但我似乎找不到一种不会导致歧义的方法 快速正则表达式表示 foo bar baz bar baz qux foo是必须的 一个或多个
  • 使用 javascript 将 SVG 转为 PNG 保留 CSS

    这有点遥远 但有人知道有一个工具可以从 svg 输入导出 png 并保留应用于它的 CSS 样式吗 我使用了canvg 但输出中所有内容都显示为黑色 因为样式保存在css 中而不是svg 文档的一部分 该解决方案是基于网络的 如果可能的话
  • 你能跳到循环中的第n次迭代吗?

    42 gt for i in range n 43 foo i 我现在正在 pdb 会话中 我想跳到循环迭代i k 无需评估foo i for i lt k 然后继续评估foo i for i gt k 如果我向前迈出一步 42 for i