【问题标题】:Where should I break a long line in Python我应该在哪里打破 Python 中的长线
【发布时间】:2018-01-19 08:11:17
【问题描述】:

我的 Python 代码中有这么长的一行:

long_variable_name = [int(name) for name in long_variable_name] if long_variable_name else None

将其拆分为小于 80 个字符宽的正确方法是什么?

【问题讨论】:

  • 老实说:长度还可以。我们不再有终端,所以 100 - 110 个字符是合理的。如果你想改进这一行,请将列表理解重构为一个函数,其名称可以解释它在做什么
  • 您可以在表达式中加上括号以将其拆分到任何您想要的位置:long_variable_name = ([int(name) for name in long_variable_name] if long_variable_name else None)
  • 根据google python style guide,您可能认为或可能不认为有用的条件表达式不适合单行应该重构为完整的if 语句。
  • 有多种 Python 风格指南。有@PaulPanzer 链接的谷歌,有PEP 8,任何公司都可能有自己的。他们可能会告诉你,你可以使用更长的线条,或者在哪里换行,或者其他各种选项。如果您没有理由使用不同的样式指南,一个好的默认值是 PEP 8,因为它是 Python 基金会推荐的。
  • @Daniel H,我想根据 PEP 8 格式化代码,但我没有找到任何破坏这种结构的提示。

标签: python line long-integer break code-formatting


【解决方案1】:

这确实是一个见仁见智的问题,但如果你无论如何都要写两行,我发现以下内容更具表现力:

if long_variable_name:
    long_variable_name = [int(name) for name in long_variable_name]
else:
    long_variable_name = None

内联 if..else 语句对我人类来说是错误的,因为条件介于两个可能的分配之间。

另一种选择是请求宽恕而不是许可:

try:
    long_variable_name = [int(name) for name in long_variable_name]
except TypeError:
    long_variable_name = None

如果您不确定 long_variable_name 是否可迭代,这可能是您需要的。 (如果您认为long_variable_name 的任何元素可能无法转换为ints,您也可以捕获ValueError)。 `

【讨论】:

  • 谁说 long_variable_name 原来是 None ?它可以是 0 或 ""[]。这不等价
  • 是的,你是对的,我已经更正了 if 声明。这将是一个注释,但在 cmets 中格式化代码很困难。
  • 对不起,但它仍然不等价。应该有一个 else 部分将long_variable_name 设置为None。此外,您基本上是在告诉三元表达式是不可读的。这是你的意见。
  • 虽然我同意你对可读性的看法,但我不想改变结构。我只是想把它分成多行。
【解决方案2】:

我最终以这种方式格式化代码:

long_variable_name = [
    int(name) for name in long_variable_name] if long_variable_name else None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-01-04
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多