在Python中执行{}while(false)
在 C++ 中,我有时会使用以下类型的代码:
do {
if (!cond1) break; // bail-out
if (!cond2) break; // bail-out
// and so on with many more conditions
// finally:
// do what I actually want to do
// when none of the previous conditions caused a bail-out
} while (false);
因此,do { } while (false);实际上并不打算作为循环,而只是一个方便的替代if-else级联的技巧。(请注意,所有这些都发生在一个块范围内,并具有所有积极影响。)
现在,我想在 Python 中做类似的事情,但我想了解是否有Pythonic替代方案。
回答
如果在检查条件之间您不想做任何事情,那么最干净的解决方案是这样的:
if cond1 and cond2 and cond3:
do_thing()
假设您确实想在检查条件之间做一些事情,这里有一些选项,按照主观 Pythonicity 的顺序。
最干净的解决方案可能是将您的代码放入一个函数中并使用return而不是break; 请注意,您可以将其编写为本地函数,无需公开代码中声明的每个函数。但是,如果该函数足够有用,那么无论如何您都可以考虑公开它。
def do_thing_on_conditions():
if not cond1: return
if not cond2: return
if not cond3: return
do_thing()
do_thing_on_conditions()
的do/while(false)成语本质上是一个环结构,其迭代一次且仅一次,因此可以将其写为for遍历长度为1的序列:
for _ in range(1):
if not cond1: break
if not cond2: break
if not cond3: break
do_thing()
最后,您可以这样做:但我不推荐这样做,因为(如do/while(false)成语)您必须一直阅读到最后才能知道这只会迭代一次。
while True:
if not cond1: break
if not cond2: break
if not cond3: break
do_thing()
break