【问题标题】:Manual stepping in python for [duplicate][重复]在python中手动单步执行
【发布时间】:2014-04-20 20:46:13
【问题描述】:

在 C++ 中,我可以这样做:

for( int i=0; i<10; ++i ) {
    if( something ) i += 3;
}

如何在 Python 中做同样的事情?

for i in range(10):
    # ????

【问题讨论】:

  • 由于我的问题缺少关键字,我找不到任何相关问题。
  • 为什么需要这样做?通常这种结构实际上并不是必需的(并且几乎总是有更好的选择)......如果你真的需要它,你将需要做一个 while 循环
  • @Aशwiniचhaudhary 只是为了说清楚。我知道如何在 python 中使用 C 风格,我想知道使用构造 in range(10) 是否可以进行额外的步进。因为我觉得while 方法很难看。

标签: python for-loop


【解决方案1】:

Python for 循环适用于迭代器。如果您在绑定到名称的迭代器对象上运行,您可以通过自己调用 next 使循环跳过未来值:

it = iter(iterable) # create our own iterator

for i in it: # loop on it
    # do stuff with i

    if something:
        next(it) # discard the next three values
        next(it)
        next(it)

如果您愿意,当然可以使用来自next(i) 调用的返回值。这对于某些类型的文本数据文件很方便,其中一个标题行指定接下来几行数据的含义。

您应该知道,如果您到达可迭代序列的末尾,next 将引发 StopIteration 异常。如果这发生在for 循环的迭代中,它会为您处理异常,但如果它发生在您自己调用next 时,则不会。如果数据的意外结束不是不可恢复的错误,您可能需要使用try/except 块来抑制异常。

【讨论】:

  • 这里的每个答案都是一个很好的答案,但我将你的答案标记为已接受,因为它实际上避免使用 C 样式的 for。
  • 不应该是下一个(它)吗?
  • @AndréPuel:是的,你是对的。我已经改正了这个愚蠢的错误。
【解决方案2】:

Python 中的基本等价物是这样的:

for i in range(start, stop, increment):
    do_something(i)

这意味着以下代码的行为相同:

for (int i = 10; i >= 1; i -= 2) {
    doSomething(i);
}

for i in range(10, 0, -2):
    do_something(i)

通常,我们希望从零开始,递增一,并在某个数字处停止,这导致了捷径:

for i in range(stop):
    do_something(i)

如果你想修改'i',并让它影响你循环的次数,你必须使用'while'循环:

i = 0
while i <= 10:
    if (something):
        i += 3
    i += 1

...这也是您在 C++ 中应该做的事情。 “for”循环用于重复一定次数。如果您在循环内修改计数器,则循环不再是确定的,您应该改用 while 循环,因为它在语义上更合适。

【讨论】:

    【解决方案3】:
    i=0
    while i<10:
        if something:
            i += 3
        else:
            i += 1
    

    【讨论】:

    • 我认为你需要 i=1 开始,因为他在进入循环之前会增加它
    • 我认为 ++i 和 i++ 在循环的最后一行做同样的事情
    • @JoranBeasley Nope
    • 啊,你可能是对的......我很久没有和 C 搞混了...... :P (+1 :P )
    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多