【问题标题】:Pep8 and multiline while conditionsPep8 和多行 while 条件
【发布时间】:2017-12-30 08:58:49
【问题描述】:

我今天不得不在一段时间条件下添加无关的括号以避免 pep8 投诉:

while not found and not something and \
    (time_left is None or time_left > 0):
    (one, two, three, four) = self.gimme(timeout=time_left)

我的解决方案:

while (not found and not something and
       (time_left is None or time_left > 0)):
    (one, two, three, four) = self.gimme(timeout=time_left)

如果我更改了第 2 行缩进,它会抱怨缩进过度或缺少缩进,每个缩进从即使是 W 到它右侧的 8 处。

我很担心添加无关的括号来满足 pep8,几乎没有提高可读性,这违反了一般原则。

有什么想法吗?我错过了更好的解决方案吗?

【问题讨论】:

  • PEP-8 建议使用括号而不是反斜杠延续,因为后者更脆弱:反斜杠后的单个杂散空格会杀死它。我同意额外的括号确实增加了一些视觉混乱,但你已经习惯了。 ;) 括号内的额外空格是合法的,我同意如果你的 IDE 或 linter 抱怨它会很烦人; OTOH,我认为如果继续的代码缩进一个缩进级别(通常是 4 个空格),它看起来会更整洁。
  • 最初我留下了一个答案,但我开始认为这将导致很多固执己见的答案,而没有真正具体的“最佳”方法来做到这一点,因为它取决于味道。
  • Python 有多种编码风格。其中许多都受到YAPF 的支持,尽管我认为它不支持优先连续而不是括号。

标签: python indentation multiline pep8 continuation


【解决方案1】:

我更喜欢在条件语句之后打破长行以增加可读性。例如:

while (
    not found and 
    not something and 
    (time_left is None or time_left > 9)
):
    (one, two, three, four) = self.gimme(timeout=time_left)

我认为这非常易读,至少满足我的 pep8 代码样式检查。

【讨论】:

  • +1,如果您使用 grumpy-ole-pylint,它会建议在条件内额外缩进,以便在视觉上将其与 while 块中的代码分开
  • 我倾向于用我的 Perl 做这样的事情,尽管我更喜欢(那里)在开头使用布尔运算符,并带有适当的缩进以使视觉清晰。当然,它不适用于 Python 的重要空白。
【解决方案2】:

我认为最好的解决方案是执行您(和您的团队,如果适用)认为最易读的解决方案。 PEP8 只是一个指导方针,不是要求。专注于编写健壮且易于理解的代码。

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2011-11-02
    • 2015-12-16
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多