关于#PYTHON:#PYTHON – 带循环的Else语句?

#PYTHON - Else statements with Loop?

本问题已经有最佳答案,请猛点这里访问。

我是一个C小伙子。这些天我在学习Python以满足我最新的项目需求。现在我的问题是:带循环的else语句的意义是什么[while,for..]。我们真的需要它们吗??


for循环耗尽其列表或当while循环变为假时,Python能够执行代码。

如果你想在循环"不成功"的情况下进行特殊处理,这实际上是相当不错的。例如,在列表中搜索数字:

1
2
3
4
5
for testVal in listOfVals:
    if lookingFor == testVal:
        print("Found one")
else:
    print("Not in the list")

对于其他语言(如C),通常保留一个found布尔变量来表示找到了该变量,然后在循环后检查该变量,如下所示:

1
2
3
4
5
6
7
8
9
10
int found = 0;
for (int i = 0; i < size; i++) {
    if (lookingFor == listOfVals[i]) {
        puts ("Found one")
        found = 1;
    }
}
if (!found) {
    puts ("Not in the list")
}

可能还有其他方法可以在C中实现同一个目的,但我觉得Python方法更自然。


从python while语句的else子句编辑:

The else clause is only executed when your [Loop]'s condition becomes false. If you break out of the loop, or if an exception is raised, it won't be executed.

换句话说,它只是一种检查循环运行是否没有任何问题的方法,并且完成了所有被支持完成的工作。如果必须在中间执行breakthrow异常,则不会执行else语句,因为循环没有"正确"完成。

编辑:链接线程的一个例子很好地解释了这一点。else语句检查循环是否完全执行-如果没有中断,并且没有引发异常,则可以执行特定的操作。例如:

1
2
3
4
5
6
7
8
9
10
...

for i in mylist:
    if i == theflag:
        break
    process(i)
else:
    raise ValueError("List argument missing terminal flag.)

...

注意,这只是为了语法。当然,你可以不使用for-else语句来完成它,就像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
...

flagfound = False
for i in mylist:
    if i == the flag:
        flagfound = True
        break
    process(i)

if not flagfound:
    raise ValueError("List argument missing terminal flag.)

...

但从语法上讲,第一种方法通常看起来更好。