如何让我的Python代码保持在80行以下?

时间:2010-01-15 10:04:32

标签: python pep8

我写了一些Python,其中一些行的长度超过80个字符,这是我需要保持的阈值。如何调整代码以减少行长?

4 个答案:

答案 0 :(得分:58)

我的当前编辑器(Kate)已配置为在行长度达到或超过80个字符时在字边界上引入换行符。这使我很明显我超越了界限。此外,还有一条标有80个字符位置的红线,让我提前警告线路何时会流过。这些让我计划适合多条物理线路的逻辑线路。

至于如何实际适合它们,有几种机制。您可以使用\结束该行,但这很容易出错。

# works
print 4 + \
    2

# doesn't work
print 4 + \ 
    2

区别?区别是不可见的 - 在第二种情况下反斜杠之后有一个空白字符。糟糕!

应该做些什么呢?好吧,用括号括起来。

print (4 + 
    2)

不需要。这实际上普遍适用,你永远不会需要\。即使是属性访问边界!

print (foo
    .bar())

对于字符串,您可以显式添加它们,也可以使用C风格的连接隐式添加它们。

# all of these do exactly the same thing
print ("123"
    "456")
print ("123" + 
    "456")
print "123456"

最后,任何形式的括号((),[]。{}),而不仅仅是括号,都可以在任何地方放置换行符。因此,例如,只要元素用逗号分隔,就可以在多行上使用列表文字。

所有这些以及更多内容都可以在Python的official documentation中找到。此外,快速注释PEP-8指定79个字符作为限制,而不是80--如果您有80个字符,则表示您已经超过它。

答案 1 :(得分:20)

如果超过80个字符的代码是函数调用(或定义),则断开参数行。 Python将识别括号,并将其视为一行。

function(arg, arg, arg, arg,
         arg, arg, arg...)

如果超过80个字符的代码是一行不易破解的代码,您可以使用反斜杠\来“转义”换行符。

some.weird.namespace.thing.that.is.long = ','.join(strings) + \
                                          'another string'

您也可以使用括号。

some.weird.namespace.thing.that.is.long = (','.join(strings) +
                                           'another string')

所有类型的set括号{}(dict / set),[](list),()(元组)都可以跨越多行而不会出现问题。这样可以实现更好的格式化。

mydict = {
    'key': 'value',
    'yes': 'no'
}

答案 2 :(得分:18)

Idiomatic Python说:

  

使用反斜杠作为最后的手段

因此,如果可以使用括号(),请避免使用反斜杠。 如果你有a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states()做类似的事情:

lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()

或者,最好重构您的代码。请。

答案 3 :(得分:18)

我会在之前的答案中加两点:

字符串可以自动连接,非常方便:

this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
                         "rest of the string: no string addition is necessary!"
                         " You can do it many times!")

请注意,这是有效的:这会导致 not 导致在运行代码时计算的字符串连接:相反,这直接被视为单个长字符串文字,因此效率很高。

与Devin的回答有关的一点警告:“括号”语法实际上并不“普遍地起作用”。例如,d [42] =“H22G”不能写为

(d
 [42] = "H2G2")

因为括号只能在“计算”表达式周围使用(这不包括如上所述的赋值(=))。

另一个例子是以下代码,它产生语法错误:

with (open("..... very long file name .....")
      as input_file):

事实上,括号不能放在语句中,更常见的是(只有表达式)。

在这些情况下,可以使用“\”语法,或者更好(因为如果可能,应避免使用“\”),将代码拆分为多个语句。