我怎样才能让我的Python代码保持在80个字符一行?

我写了一些Python,其中一些行超过80个字符的长度,这是一个门槛,我需要留下。 我怎样才能调整我的代码来减less行长?

我的当前编辑器(Kate)已configuration为在行长度达到或超过80个字符时在单词边界上引入换行符。 这使得我已经超越了界限。 此外,还有一个红线标出了80个字符的位置,让我预先警告线路何时会stream过。 这些让我规划出适合多条物理线路的逻辑线路。

至于如何真正适合他们,有几个机制。 你可以用\来结束这行,但是这很容易出错。

# works print 4 + \ 2 # doesn't work print 4 + \ 2 

区别? 差别是不可见的 – 在第二种情况下,反斜杠后面有一个空格字符。 哎呀!

应该做些什么呢? 那么,把它括在括号里。

 print (4 + 2) 

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

 print (foo .bar()) 

对于string,可以显式地添加它们,或者隐式地使用C风格的join。

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

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

所有这些和更多可以在Python的官方文档中find。 另外,一个简单的说明, PEP-8指定了79个字符作为限制,而不是80个 – 如果你有80个字符,你已经在上面了。

如果超过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') 

所有types的括号{}(字典/集合),[](列表),()(元组)可以在几行中被打破,没有任何问题。 这允许更好的格式。

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

习惯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() 

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

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

string可以自动连接,非常方便:

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

请注意,这是有效的:这不会导致Python解释器中的string连接:相反,它只是被认为是一个单独的长string,所以它是有效的。

有一点与德文的答案有关:“括号”语法实际上并不“普遍地工作”。 例如,d [42] =“H22G”不能写成

 (d [42] = "H2G2") 

因为圆括号只能用于“计算”expression式(这不包括像上面这样的赋值(=))。

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

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

实际上,括号不能放在陈述中,更普遍的是(只有expression式)。

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