在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


以上是在Python中执行{}while(false)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>