[英]Flow control after breaking out of while loop in Python
我对编程和Python都很陌生。 几次,我创造了一个感觉就像一个尴尬的程序流程,我想知道我是否遵循最佳实践。 这在概念上是我想要做的:
def pseudocode():
while some condition is true:
do some stuff
if a condition is met:
break out of the while loop
now do a thing once, but only if you never broke out of the loop above
我最终做了什么工作,但不知怎的感觉:
def pseudocode():
while some condition is true:
do some stuff
if some condition is met:
some_condition_met = True
break out of the while loop
if some_condition_met is False:
do a thing
有没有更好的办法?
你正在寻找while-else
循环:
def pseudocode():
while some condition is true:
do some stuff
if a condition is met:
break out of the while loop
else:
now do a thing once, but only if you never broke out of the loop above
来自docs:
while_stmt ::= "while" expression ":" suite
["else" ":" suite]
在第一个套件中执行的
break
语句终止循环而不执行else
子句的套件。
对while
循环使用else
子句:
while some_condition:
do_stuff()
if a_condition_is_met:
break
else:
executed_when_never_broken
请参阅while
语句文档 :
在第一个套件中执行的
break
语句终止循环而不执行else
子句的套件。
如果你考虑一下,你可能已经有一个非常好的条件,可以在不设置标志的情况下使用:while循环顶部的条件(或者更确切地说, not
它的条件)。 假设你没有在break
的同一次迭代中改变你的条件的真实性,这会给你:
while something:
do_stuff()
if something_else:
break
if not something:
more_stuff()
如果您将while
视为重复if
:而不是发生一次,一段时间一直持续到条件变为假,这是有道理的。
但是,就像其他答案所提到的那样,这个比喻更进一步:就像你不必拼写所有的if
s一样
if a:
a_stuff()
if not a:
b_stuff()
while
接受一个else
如果在顶部进行条件测试,发现为falsey时执行。 所以,
while something:
do_stuff()
if something_else:
break
else:
more_stuff()
并且,与if
/ else
情况相同,这并不意味着对条件的任何进一步测试都不会发生。 在一个同样的方式else
连接到if a
如果真分支使得将不会运行a
falsey,一个else
连接到while
会后就再也没有运行break
,因为这明确地跳过以后再检查的条件。 这使得else:
在每种情况下else:
相当于一个decicated标志。
这也延伸到for
循环,即使类比中断 - 但它在类似的足够规则下执行:如果循环结束而不是break
则运行else
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.