14

我是 Python 初学者。我发现elsein for- elseand while-else是完全没有必要的。因为forandwhile最终会运行到else,我们可以使用通常的行来代替。

例如:

for i in range(1, 5):
    print i
else:
    print 'over'

for i in range(1, 5):
    print i
print 'over'

是相同的。

那么为什么 Python 有elsein for-elsewhile-else呢?

4

2 回答 2

27

你对 for/else 的语义是错误的。else 子句仅在循环完成时运行,例如,如果没有遇到 break 语句。

典型的 for/else 循环如下所示:

for x in seq:
    if cond(x):
        break
else:
    print "Didn't find an x I liked!"

将“else”想象成与循环体中的所有“if”配对。您的样本是相同的,但混合了“break”语句,它们不是。

相同想法的更长描述:http: //nedbatchelder.com/blog/201110/forelse.html

于 2012-07-20T02:50:57.163 回答
1

for ... else语句用于实现搜索循环。

特别是,它处理搜索循环找不到任何东西的情况。

for z in xrange(10):
    if z == 5:
        # We found what we are looking for
        print "we found 5"
        break # The else statement will not execute because of the break
else:

    # We failed to find what we were looking for
    print "we failed to find 5"
    z = None

print 'z = ', z

输出:

we found 5
z =  5

该搜索与

z = None
for z in xrange(10):
    if 5 == z:
        # We found what we are looking for
        break

if z == None:
    print "we failed to find 5"
else:
    print "we found 5"

print 'z = ', z

请记住,如果搜索列表为空(即) ,for则不会初始化 z 。[]这就是为什么我们必须确保在搜索后使用 z 时定义它。以下将引发异常,因为z在我们尝试打印时未定义。

for z in []:
    if 5 == z:
        break

print "z = ",z

输出

    print "z = ",z
NameError: name 'z' is not defined

总之,只要循环自然终止,该else子句就会执行。如果循环中for发生中断或异常,则语句将不会执行。forelse

于 2017-06-13T13:54:03.277 回答