首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"else“子句的目的是在"for”或"while“循环之后?

为什么"else“子句的目的是在"for”或"while“循环之后?
EN

Stack Overflow用户
提问于 2012-07-20 10:49:31
回答 2查看 3.5K关注 0票数 14

我是Python初学者。我发现for-elsewhile-else中的else是完全不必要的。因为forwhile最终会运行到else,所以我们可以使用通常的代码行。

例如:

代码语言:javascript
复制
for i in range(1, 5):
    print i
else:
    print 'over'

代码语言:javascript
复制
for i in range(1, 5):
    print i
print 'over'

都是一样的。

那么为什么Python在for-elsewhile-else中有else

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 10:50:57

您对for/else的语义理解是错误的。只有当循环完成时,else子句才会运行,例如,如果没有遇到break语句。

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

代码语言:javascript
复制
for x in seq:
    if cond(x):
        break
else:
    print "Didn't find an x I liked!"

将"else“视为与循环体中的所有"if's”配对。您的示例是相同的,但混合使用"break“语句时,它们就不同了。

对同一概念的更长描述:http://nedbatchelder.com/blog/201110/forelse.html

票数 27
EN

Stack Overflow用户

发布于 2017-06-13 21:54:03

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

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

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
we found 5
z =  5

该搜索与以下内容相同

代码语言:javascript
复制
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时,它没有被定义。

代码语言:javascript
复制
for z in []:
    if 5 == z:
        break

print "z = ",z

输出

代码语言:javascript
复制
    print "z = ",z
NameError: name 'z' is not defined

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11572164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档