我发现自己不断打破字符串只是为了让它们在下一行.当然,当我去更改这些字符串(想想日志消息)时,我必须重新格式化中断以使它们保持在80列之内.
大多数人如何处理这个问题?
Eli*_*sky 27
我建议尽量保持80柱,但不惜任何代价.有时候,就像记录消息一样,让它们长时间而不是分手更有意义.但对于大多数情况,如复杂的条件或列表推导,分手是一个好主意,因为它将帮助您将复杂的逻辑划分为更易理解的部分.它更容易理解:
print sum(n for n in xrange(1000000)
if palindromic(n, bits_of_n) and palindromic(n, digits))
Run Code Online (Sandbox Code Playgroud)
比:
print sum(n for n in xrange(1000000) if palindromic(n, bits_of_n) and palindromic(n, digits))
Run Code Online (Sandbox Code Playgroud)
如果您刚刚编写它,它可能看起来一样,但几天后这些长线变得难以理解.
最后,虽然PEP 8规定了列限制,但它也说:
风格指南是关于一致性的.与此风格指南的一致性非常重要.项目的一致性更为重要.一个模块或功能内的一致性是最重要的.
但最重要的是:知道何时不一致 - 有时风格指南不适用.如有疑问,请使用您的最佳判断.查看其他示例并确定最佳效果.并且不要犹豫!
S.L*_*ott 12
"愚蠢的一致性是小脑袋的大人物,小政治家,哲学家和神职人员都崇拜这种思想."
重要的是"愚蠢".
与PEP 8的其他部分一样,80列限制是一个非常强烈的建议.但是,有一个限制,超出这个限制,它可以被视为愚蠢的一致性.
我在Komodo打开了缩进指南和边缘线.这样,我知道我什么时候跑过来.问题是"为什么?" 并且"值得修理它吗?"
以下是我们的常见情况.
记录消息.我们试图让这些容易包装.它们看起来像这样
logger.info( "unique thing %s %s %s",
arg1, arg2, arg3 )
Run Code Online (Sandbox Code Playgroud)
Django过滤表达式.这些可以继续,但这是一件好事.我们经常连续编织几个过滤器.但它不必是一行代码,多行可以使它更清楚发生了什么.
这是函数式编程的一个例子,其中长表达是明智的.但是,我们避免它.
单元测试预期结果字符串.发生这种情况是因为我们剪切并粘贴以创建单元测试代码,并且不会花费大量时间来重构它.当它让我们烦恼时,我们将字符串拉出到单独的字符串变量中并清理这些self.assertXXX()行.
我们通常没有长行代码,因为我们不使用lambdas.我们不努力进行流利的课堂设计.我们不会传递大量的参数(少数情况除外).
我们很少有很多功能风格的长篇表达.当我们这样做时,我们并不尴尬地将它们分解并留下一个中间结果.如果我们是功能纯粹主义者,我们可能有含有中间结果变量的气体,但我们不是纯粹主义者.
无论什么年份或您使用的输出设备(在某种程度上)都无关紧要.你的代码应该是如果可能的话可读人.人类很难读长线.
这取决于线路的内容应该是多长时间.如果它是一条日志消息,那么它的长度就更少了.如果它是一个复杂的代码,那么它的长度将无助于理解它.
临时变量.他们用长线解决了几乎所有问题.偶尔,我需要使用一些额外的parens(比如更长的if语句).我不会对80个字符限制提出任何论据,因为这似乎无关紧要.
具体来说,对于日志消息; 代替:
self._log.info('Insert long message here')
Run Code Online (Sandbox Code Playgroud)
使用:
msg = 'Insert long message here'
self._log.info(msg)
Run Code Online (Sandbox Code Playgroud)
关于这个很酷的事情是它无论如何都会是两行,但是通过使用好的变量名,你也可以自我记录.例如,而不是:
obj.some_long_method_name(subtotal * (1 + tax_rate))
Run Code Online (Sandbox Code Playgroud)
使用:
grand_total = subtotal * (1 + tax_rate)
obj.some_long_method_name(grand_total)
Run Code Online (Sandbox Code Playgroud)
我见过的大多数长线都试图做不止一件事,把这些事情中的一部分变成一个临时变量是微不足道的.主要的例外是非常长的字符串,但通常也可以在那里做,因为代码中的字符串通常是结构化的.这是一个例子:
br = mechanize.Browser()
ua = '; '.join(('Mozilla/5.0 (Macintosh', 'U', 'Intel Mac OS X 10.4',
'en-US', 'rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6'))
br.addheaders = [('User-agent', ua)]
Run Code Online (Sandbox Code Playgroud)
这是一个很好的规则,可以保持很长一段时间,但不要把头发拉过来.最重要的是风格上你的代码看起来可读和干净,并保持你的线条合理的长度是其中的一部分.
有时让超过80列的内容运行起来更好,但大部分时间我都可以编写代码,使其简洁明了,适合80或更少.正如一些响应者指出80的限制是相当过时的,但是有这样的限制并且许多人有终端并不坏
以下是我在尝试限制线条长度时要记住的一些事项:
这是一个风格问题,但风格非常重要,因为您希望人们阅读和理解您的代码.
| 归档时间: |
|
| 查看次数: |
5533 次 |
| 最近记录: |