我应该如何打破这么长的 Python 行?

How should I break this long Python line?

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

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

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

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

只需使用变量:

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)
        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)

显然,您可以内联任何引入的变量。

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

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]]
    )
  )
)

事实上,您也可以这样拆分索引。

断线有两种方式

  • 使用\:
    您可以将它插入任何地方 (甚至在变量之间) 并从那里取下来:

            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]]
            )))
    

为了便于阅读,我更喜欢后一种。