说我有功能
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
我对if (
长4个字符的事实做了什么,从而使“返回”位看起来很奇怪(并且可能具有误导性)?请不要说if
内容放在1行,在我的实际代码中,内容超过79个字符。
我想到了几个选择:
A)
def func(arg1):
if (arg1 > 5
and arg1 != 10
):
return "something"
B)
def func(arg1):
if (
arg1 > 5
and arg1 != 10
):
return "something"
偏离主题,但是孤儿):
看起来像一张不高兴的脸:(
答案 0 :(得分:4)
PEP 8 recommends a double-indent in similar cases,我觉得它很好看:
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
但
这个PEP明确地没有说明在多行
if
陈述之后如何或是否进一步在视觉上区分连续线。
所以你可以根据它真正使用任何可接受的选项:
# No extra indentation. if (this and that): do_something() # Add a comment, which will provide some distinction in editors # supporting syntax highlighting. if (this and that): # Since both conditions are true, we can frobnicate. do_something() # Add some extra indentation on the conditional continuation line. if (this and that): do_something()
答案 1 :(得分:1)
PEP8 涵盖了此内容。这样:
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
假设每个部分都低于80个字符,的格式应如下所示:
def func(arg1):
if arg1 > 5 and arg1 != 10:
return "something"
或者像这样,将控制流程代码块与continuation区分开来:
def func(arg1):
if (
really.really.really.really.really.really.really.long.name(arg1) > 5
and arg1 != 10):
return "something"
虽然沿着括号对齐通常很好,但我会断言以下是坏,因为它无法在视觉上区分代码块和括号对齐的条件:
def func(arg1):
if (really.really.really.really.really.really.really.long.name(arg1) > 5
and arg1 != 10): # Don't do this!
return "something"
答案 2 :(得分:0)
我知道,这有点痛苦。在许多人看来,PEP8并没有完全涵盖这一点。我使用Flake8检查我的Python代码,这种特殊情况是一个真正的视觉代码杀手。
如果您没有使用自动样式检查程序,我会坚持使用您的第一个示例:
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
您知道,这违反了E125 (continuation line with same indent as next logical line)。如果您尝试修复它,您可能会遇到E127 (continuation line over-indented for visual indent)。这是一个粘性循环;)
你可以做的一件事傻瓜样式检查器是创建1个字符的偏移量,并为条件代码块添加另一个缩进级别。这看起来很愚蠢,但它将解决所有PEP8问题。
def func(arg1):
if ((arg1 > 5
and arg1 != 10)):
return "something"
不可否认,大多数情况下,出于您的确切原因,我将这些行留下超过80个字符(和E125)。你也可以重构你的条件,但我不确定它是否值得付出额外的努力。