如何编写符合PEP8并避免E501的超长字符串
PEP8建议每行代码的字符数限制在80个字符以内。但是我的字符串超过了这个限制:
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
我应该怎么格式化它才能保持在字符限制之内呢?比如说,
s = (
"this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
)
13 个回答
19
我觉得你问题中最重要的一个词是“建议”。
编码标准有时候挺有趣的。它们提供的指导在制定的时候通常是有很好的依据的(比如大多数终端只能显示每行不超过80个字符),但随着时间的推移,这些标准可能就变得不再适用了,但大家还是很固执地遵守。你需要做的就是权衡一下“打破”这个建议和你代码的可读性、可维护性之间的利弊。
抱歉这没有直接回答你的问题。
392
因为相邻的字符串常量会自动连接,所以你可以这样写代码:
s = ("this is my really, really, really, really, really, really, "
"really long string that I'd like to shorten.")
注意没有加加号,我还加了额外的逗号和空格,这样跟你例子里的格式一致。
个人来说,我不喜欢反斜杠,我记得在哪里看到过,反斜杠的用法其实已经不推荐了,建议用这种更明确的写法。记住,“明确总比含糊好。”
我觉得反斜杠不够清晰,也不太好用,因为它实际上是在转义换行符。如果需要在后面加行尾注释,就做不到。而用连接的字符串常量就可以做到这一点:
s = ("this is my really, really, really, really, really, really, " # comments ok
"really long string that I'd like to shorten.")
我用谷歌搜索了“python 行长度”,第一个结果是PEP8的链接,还有一个关于这个话题的不错的StackOverflow帖子:“为什么Python PEP-8要规定最大行长度为79个字符?”
另一个好的搜索词是“python 行继续”。
149
隐式连接可能是最简洁的解决方案:
s = "this is my really, really, really, really, really, really," \
" really long string that I'd like to shorten."
编辑 回想一下,我同意Todd的建议,使用括号而不是换行符更好,理由也很充分。我唯一的顾虑是,括号里的字符串和元组(tuple)容易搞混。