如何为多行条件的'if'语句上样式?
有时候我会把很长的条件放在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年以来推荐使用括号。