你如何正确地打破这条线以匹配pep8规则?

时间:2011-05-09 00:18:17

标签: python pep8

鉴于这个Python类,实现了一个Django表单,你如何正确地破解它以符合PEP8标准?

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label="Additional Item Ship Cost")

具体来说,widget =和label =参数违反了PEP8规则的行长。

我立即想到的是,我可以在类之外定义小部件和标签,然后在类定义中使用它们,但这感觉非常不同于pythonic。

3 个答案:

答案 0 :(得分:22)

我不认为PEP8对此有很多说法,但我只想对参数进行双重缩进:

class MyForm(forms.Form):
    categories = forms.CharField(
            required=False,
            widget=forms.SelectMultiple(choices=CATEGORY_VALUE),
            label="Categories"
        )
    additional_item_ship_cost = forms.CharField(
            required=False,
            max_length=10,
            label="Additional Item Ship Cost"
        )

答案 1 :(得分:4)

我同意对连续行使用双(8列)缩进,因为它很容易区分延续和块缩进。我还希望缩进独立于第一行的长度;长度将随着代码的维护而改变,但这不需要更改延续线。

所以不要在第一行排列任何连续行;相反,对任何延续行使用相同的相对缩进

用于延续的反斜杠是有问题的(不可见的尾随空格可以改变效果),幸运的是几乎不需要,因为Python会自动在开放包围语法中继续语句。 在open-paren打破函数调用(并在开括号中进行切换,在开括号中列出等等)是我首先达到的目的。

所以我会这样做:

class MyForm(forms.Form):
    categories = forms.CharField(
            required=False,
            widget=forms.SelectMultiple(
                choices=CATEGORY_VALUE),
            label="Categories")
    additional_item_ship_cost = forms.CharField(
            required=False, max_length=10,
            label="Additional Item Ship Cost")

答案 2 :(得分:1)

您已经知道可以用逗号在parens中分割一行。您是否知道可以始终使用反斜杠换行组合来分割不能分割它们的行?:

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=\
                                     CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label=\
                                                "Additional Item Ship Cost")

另外,您可能不知道Python会连接相邻的文字字符串, 扔掉它们之间的任何空格,所以上面的内容可以重写为:

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=CATEGORY_VALUE),                                               
                                 label=\
                                     "Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label="Additional"\
                                                    " Item Ship Cost")

最后,在parens中,你可以像在逗号处一样在'dot'处分割线条,你可以使用parens来获得这种能力:

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.
                                     SelectMultiple(choices=\
                                     CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = (forms.
                                     CharField(required=False, max_length=10,                                                      
                                               label="Additional "\
                                                   "Item Ship Cost"))

将所有这些与后续分割线的明智去缩进相结合,您应该能够避免超过80个字符的行。