Python 缩进包装的、带括号的if条件时的样式
假设我有这个功能Python 缩进包装的、带括号的if条件时的样式,python,coding-style,Python,Coding Style,假设我有这个功能 def func(arg1): if (arg1 > 5 and arg1 != 10): return "something" 对于if(为4个字符长,因此“return”位看起来很奇怪(可能会产生误导),我该怎么办?请不要说将if内容放在一行,在我的实际代码中,内容超过79个字符 我想到了几个选择: (A) (B) 离题了,但是孤儿的:看起来像一张不高兴的脸:(,我觉得它看起来很好: def func(arg1): i
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
对于if(
为4个字符长,因此“return”位看起来很奇怪(可能会产生误导),我该怎么办?请不要说将if
内容放在一行,在我的实际代码中,内容超过79个字符
我想到了几个选择:
(A)
(B)
离题了,但是孤儿的:看起来像一张不高兴的脸:(,我觉得它看起来很好:
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
但是
对于如何或是否在多行if
语句之后进一步直观地区分连续行,本PEP没有明确的立场
因此,您可以根据it实际使用任何可接受的选项:
我知道这有点痛苦。在许多人看来,PEP8并没有完全涵盖这一点。我使用Flake8检查我的Python代码,这种特殊情况是一个真正的视觉代码杀手 如果您不使用自动样式检查器,我将继续使用您的第一个示例: 正如你所知,这违反了。如果你试图修复它,你很可能会遇到。这是一个粘性循环;) 要愚弄样式检查器,可以做的一件事是创建一个1个字符的偏移量,并向条件代码块添加另一个缩进级别。这似乎很愚蠢,但它将解决所有PEP8问题
def func(arg1):
if ((arg1 > 5
and arg1 != 10)):
return "something"
不可否认,出于您的确切原因(和E125),大多数时候我会将这些行的长度超过80个字符。您也可以重构您的条件,但我不确定是否值得付出额外的努力。PEP8确实涵盖了这一点。这:
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
假设每个部分少于80个字符,格式应如下所示:
def func(arg1):
if 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):
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"
啊,当我上次读它的时候,我一定错过了。PEP8建议将连续行的缩进与以下缩进行区分开来。在你所引用的例子和之前的否定例子中,它有点自相矛盾(“因为压痕不可区分,所以需要进一步的压痕)。@moooeeep这可能就是为什么我错过了额外的压痕的原因,因为矛盾而恼火没有回答你的问题,但是如果你的代码中有80个字符,如果条件,那么你可以考虑把它的一部分提取成几个局部变量,或者用布尔函数调用替换。不是为了避免解决压痕问题,但是为了提高可读性。我强烈推荐选项B。这是唯一一个明确说明
if
条件中的缩进是独立的,并且在语义上与if
正文的缩进没有联系的选项。@BrenBarn似乎每个人都有自己喜欢的风格:S@RomanI有用的提示,但我认为在我实际代码中的特定情况下,可读性会降低(相应的arg1和arg5基本上都有较长的变量名)。实际上,循环语句和函数遵循相同的样式指南吗?
def func(arg1):
if (arg1 > 5
and arg1 != 10):
return "something"
def func(arg1):
if 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):
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"