首页 > 解决方案 > 当有点或逗号时如何在 PEP8 中使用反斜杠?

问题描述

这是我的数据框:

In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'col1':['A','A','A','B','B','B'], 'col2':['C','D','D','D','C','C'], 
            'col3':[.1,.2,.4,.6,.8,1]})
In [3]: df
Out[4]: 
  col1 col2  col3
0    A    C   0.1
1    A    D   0.2
2    A    D   0.4
3    B    D   0.6
4    B    C   0.8
5    B    C   1.0

我的问题是:当我想换行长文本时,我应该把反斜杠放在哪里?在点之后还是在点之前?哪个是对的?

# option 1 backslash after dot or comma
df.groupby('col1').\
    sum()
df['col1'],\
    df['col2']

# option 2 backslash before dot or comma
df.groupby('col1')\
    .sum()
df['col1']\
    ,df['col2']

我还发现,如果我使用括号,我就不必使用反斜杠。那么哪个选项是正确的呢?

# option 1: no backslash and dot or comma in the new line
(df.groupby('col1')
    .sum())
(df['col1']
    ,df['col2'])

# option 2: no backslash and dot or comma in the old line
(df.groupby('col1').
    sum())
(df['col1'],
    df['col2'])

# option 3: backslash after dot or comma 
(df.groupby('col1').\
    sum())
(df['col1'],\
    df['col2'])

# option 4: backslash before dot or comma 
(df.groupby('col1')\
    .sum())
(df['col1']\
    ,df['col2'])

标签: python-3.xbackslashpep8

解决方案


解释

PEP8 在可能的情况下更喜欢使用括号而不是反斜杠

PEP8 没有说明点或逗号需要与表达式在同一行(尽管在给出的每个示例中都是这样)。

解决方案

技术上正确的答案是:

# option 1: no backslash and dot or comma in the new line
(df.groupby('col1')
    .sum())
(df['col1']
    ,df['col2'])

# option 2: no backslash and dot or comma in the old line
(df.groupby('col1').
    sum())
(df['col1'],
    df['col2'])

尽管有人可能会争辩说,反对在尾随逗号和右括号之间使用空格的建议是证明 rule 的例外,这意味着:,df['col2']不遵循标准(尽管, df['col2']仍然如此)。

尽管上面介绍的 2 个选项在技术上是正确的,但以下是最常用的:

(df.groupby('col1')
    .sum())
(df['col1'],
    df['col2'])

注意:缩进取决于它使用的上下文。上面的例子不应该作为参考。还要记住PEP8 只是一个指南,有很多场景应该打破规则以提高可读性。


推荐阅读