此问题在此处已有答案:
Why does python use 'else' after for and while loops?(24个答案)
8个月前关闭。
我几乎从来没有注意到一个python程序在for循环中使用else。
我最近使用它在退出时根据循环变量条件执行一个操作;因为它在范围内。
在for循环中使用else的Python方法是什么?有什么值得注意的用例吗?
而且,是的。我不喜欢使用break语句。我宁愿把循环条件设置为复杂的。如果我不喜欢使用break语句,我能从中得到什么好处吗?
值得注意的是,自语言诞生以来,for循环就有一个else,这是有史以来的第一个版本。
8条答案
按热度按时间webghufk1#
还有什么能比PyPy更像Python呢?
看看我在ctypes_configure/ www.example.com中从第284行开始发现的内容configure.py:
这里,从pypy/annotation/annrpython.py(clicky)中的第425行开始
在pypy/annotation/ www.example.com中binaryop.py,从第751行开始:
pypy/annotation/ www.example.com中的非一行程序classdef.py,从第176行开始:
在同一个文件的后面,从第307行开始,有一个例子,其中有一个启发性的注解:
w1jd8yoj2#
基本上,它简化了任何使用布尔标志的循环,如下所示:
并允许您跳过标记的管理:
注意,当您找到除数时,已经有了一个自然的代码执行位置-就在
break
之前。这里唯一的新特性是当您尝试了所有除数但没有找到任何除数时,代码执行的位置。break
结合使用时才有帮助 *。如果你不能break,你仍然需要布尔值(例如,因为你在寻找最后一个匹配,或者必须并行跟踪几个条件)。哦,顺便说一句,这对while循环同样有效。
任何/所有
如果循环的唯一目的是回答是或否,则可以使用带有生成器或生成器表达式的
any()
/all()
函数:注意优雅!代码是1:1你想说什么!
[This和
break
的循环一样有效,因为any()
函数是短路的,只运行生成器表达式,直到生成True
。较简单的Python代码往往具有较少的偷听,因此实际上可能更快。]如果你想找到除数,真实值是没有帮助的,因为
any()
总是精确地返回True
或False
。此外,如果
0
能够以某种方式解决any()
搜索中的条件,那么没有 Package 器(如[divisor]
)就无法工作。syqv5f0l3#
如果你有一个for循环,你实际上没有任何条件语句,所以break是你的选择,如果你想中止,那么else可以完美地处理你不满意的情况。
xxls0lw84#
如果不使用
break
,else
块对for
和while
语句没有任何好处。以下两个示例是等效的:将
else
与for
或while
一起使用的唯一原因是,如果循环正常终止(即没有显式break
),则在循环之后执行一些操作。经过大量思考,我终于想出了一个可能有用的例子:
vojdkbi05#
也许最好的答案来自Python官方教程:
break和continue语句,以及循环中的else子句:
bqf10yzr6#
有人向我介绍了一个很好的习惯用法,在这个习惯用法中,可以使用带有迭代器的
for
/break
/else
方案来保存时间和LOC。手头的示例是搜索不完全限定路径的候选路径。如果您想查看原始上下文,请参阅the original question。这里使用
for
/else
之所以如此出色,是因为它避免了混淆布尔值,如果没有else
,但希望实现相同数量的短路,它可以这样写:我认为
else
的使用使它更优雅,更明显。mgdq6dx17#
循环的
else
子句的一个用例是打破嵌套循环:它可避免重复条件:
disbfnqx8#
给你:
这是给尾车的。
编辑:
编辑: