我怎样才能让我的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式)。
在这些情况下,可以使用“\”语法,或者更好(因为如果可能,应避免使用“\”),将代码拆分为多个语句。