Thi*_*ter 34 python coding-style indentation code-readability
如果在条件下缩进很长时间,你通常会做这样的事情(实际上,PyDev会这样缩进):
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
但是,这会将if语句启动的块放在与if条件的最后一部分相同的缩进级别上,这使得它在我看来非常难看/难以阅读,因为您没有立即看到块的开始位置.
我想到的其他一些风格:
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
这看起来非常不一致,因为第二行缩进比第一行缩进得多,但它是可读的.
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
这也比第一个例子更具可读性,但缩进不再是4的倍数,而且它看起来不对,因为第二行的缩进比第一行中条件的开头少.
所以,我的主要问题是:对于那些不需要过长行(即单行条件)的情况,是否有建议的缩进样式?如果没有,你更喜欢这样的情况?
Obe*_*nne 23
我经常通过计算自己语句中的条件来解决这个问题:
condition = (collResv.repeatability is None or
collResv.somethingElse)
if condition:
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
虽然,对于一个相对较短的情况,如你的具体例子,我会选择nosklo的解决方案 - 这里使用的额外声明更适合更长的条件表达式.
nos*_*klo 13
这就是我做的:
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
Rei*_*und 12
这里所有先前建议的一个问题是后续条件的逻辑运算符被放在前一行.Imo,这使得它的可读性降低.
我建议将逻辑运算符放在与if语句附加的条件相同的行上.
在我看来,这更好
if (None == foo
and None == bar
or None == foo_bar):
Run Code Online (Sandbox Code Playgroud)
比这个:
if (None == foo and
None == bar or
None == foo_bar):
Run Code Online (Sandbox Code Playgroud)
这是一个间接的答案 - 不直接回答风格问题,但这是一般的实际答案,所以值得一提.
我发现需要编写多行条件非常罕见.这有两个因素:
通过我最近的项目,大约12kloc,只有一个条件足够长,需要包装; 这个问题很少出现.如果你确实需要这样做,那么就像nosklo所说的那样,单独缩进它 - 正如你所注意到的那样,将它缩进到与它下面的块相同的水平是令人困惑和难以阅读的.