如何为多行条件的'if'语句上样式?

880 投票
30 回答
1619766 浏览
提问于 2025-04-11 09:25

有时候我会把很长的条件放在if语句里,分成几行来写。最简单的方法就是这样:

  if (cond1 == 'val1' and cond2 == 'val2' and
      cond3 == 'val3' and cond4 == 'val4'):
      do_something

不过这样看起来不是很好,因为动作和条件混在一起了。不过,这确实是用正确的Python缩进(4个空格)来写的自然方式。

目前我在用的是:

  if (    cond1 == 'val1' and cond2 == 'val2' and
          cond3 == 'val3' and cond4 == 'val4'):
      do_something

但这样看起来也不太好。:-)

你能推荐一个更好的写法吗?

30 个回答

79

当我遇到特别复杂的if条件时,我更喜欢这种写法:

if (
    expr1
    and (expr2 or expr3)
    and hasattr(thingy1, '__eq__')
    or status=="HappyTimes"
):
    do_stuff()
else:
    do_other_stuff()
148

在这种特殊情况下,我采用了以下方法,这种情况就是只有 AND 或 OR 的简单组合。

if all( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):

if any( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):

这样可以减少一些字符,并且让条件变得更加清晰,没什么复杂的地方。

990

在你的第二个条件行上,不需要用4个空格。可以试试这样:

if (cond1 == 'val1' and cond2 == 'val2' and 
       cond3 == 'val3' and cond4 == 'val4'):
    do_something

另外,别忘了空格的使用比你想象的要灵活:

if (   
       cond1 == 'val1' and cond2 == 'val2' and 
       cond3 == 'val3' and cond4 == 'val4'
   ):
    do_something
if    (cond1 == 'val1' and cond2 == 'val2' and 
       cond3 == 'val3' and cond4 == 'val4'):
    do_something

不过这两种写法看起来都不太美观。

也许可以去掉括号(不过风格指南不太建议这样做)?

if cond1 == 'val1' and cond2 == 'val2' and \
   cond3 == 'val3' and cond4 == 'val4':
    do_something

这样至少能让你代码看起来有些区别。

或者甚至可以这样写:

if cond1 == 'val1' and cond2 == 'val2' and \
                       cond3 == 'val3' and \
                       cond4 == 'val4':
    do_something

我觉得我更喜欢:

if cond1 == 'val1' and \
   cond2 == 'val2' and \
   cond3 == 'val3' and \
   cond4 == 'val4':
    do_something

这是风格指南,自2010年以来推荐使用括号。

撰写回答