【问题标题】:How should I break this long Python line?我应该如何打破这条长长的 Python 行?
【发布时间】:2015-11-26 16:51:35
【问题描述】:

我正在格式化将包含在报告附录中的代码,因此尊重 80 个字符的行不仅仅是 PEP8 的狂热,因为如果行太长,它们会继续超过纸张的宽度。

通常,使用 PEP8 建议和一些逻辑来打破长行,事情很容易,但我遇到了这个 90 个字符的长行,缩进了 3 次:

            valleys.append(data.index(min(data[frontieres[f*2+1]:frontieres[f*2+2]])))

如果可能的话,我应该如何在不更改变量名称的情况下打破它?

【问题讨论】:

  • 制作中间变量? min 值至少有一个。
  • 致任何想编辑此问题的人:缩进是故意的。
  • 您将许多步骤设置为一个步骤。很明显,你会得到这么大的一条线。

标签: python code-formatting


【解决方案1】:

我不喜欢我建议你的想法,因为好的做法是将那行重写为更易读的内容。但是,如果您必须更好地将现有代码格式化为科学报告,那么您有我的建议:

valleys.append(
  data.index(
    min(
      data[frontieres[f*2+1]:frontieres[f*2+2]]
)))

Python 允许在括号之间拆分行,而无需任何额外的技巧。

更正确的方法是:

valleys.append(
  data.index(
    min(
      data[frontieres[f*2+1]:frontieres[f*2+2]]
    )
  )
)

事实上,您也可以通过这种方式拆分索引。

【讨论】:

  • 有趣的观察。如果我将我的多行变体与下面的重写进行比较,我会觉得我的格式实际上比这些具有多个变量的东西更具可读性。初衷一目了然。
【解决方案2】:

有两种方法可以断线。

  • 使用\:
    您可以将它插入到任何位置(甚至在变量之间),然后从那里取下来:

            valleys.append(data.index(min(data[frontieres[f*2+1]\
                          :frontieres[f*2+2]])))
    
  • 脱离(:
    任何函数都可以在另一行接受参数

            valleys.append(data.index(min(
                data[frontieres[f*2+1]:frontieres[f*2+2]]
            )))
    

为了可读性,我更喜欢后者。

【讨论】:

    【解决方案3】:

    只使用变量:

    some_data = data[frontieres[f*2+1]:frontieres[f*2+2]]
    min_some_data = min(some_data)
    data_index = data.index(min_some_datan)
    valleys.append(data_index)
    

    【讨论】:

      【解决方案4】:
              data_range = data[frontieres[f*2+1]:frontieres[f*2+2]]
              data_min = min(data_range)
              index_min = data.index(data_min)
              valleys.append(index_min)
      

      显然你可以内联任何引入变量。

      【讨论】:

      • 不知道为什么一开始没想到!
      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2022-11-16
      相关资源
      最近更新 更多