我发现自己一直在编写相当长的单行代码(受shell管道影响),如下所示:
def parseranges(ranges, n):
"""
Translate ":2,4:6,9:" to "0 1 3 4 5 8 9...n-1"
== === == === ===== =========
"""
def torange(x, n):
if len(x)==1:
(x0, ) = x
s = 1 if x0=='' else int(x0)
e = n if x0=='' else s
elif len(x)==2:
(x0, x1) = x
s = 1 if x0=='' else int(x0)
e = n if x1=='' else int(x1)
else:
raise ValueError
return range(s-1, e)
return sorted(reduce(lambda x, y:x.union(set(y)), map(lambda x:torange(x, n), map(lambda x:x.split(':'), ranges.split(','))), set()))
我写的时候感觉很好 我认为很长的单行代码是函数式编程风格 但是,几个小时后,我对它感到很难过 我担心会受到维护者的批评 可悲的是,我已经习惯了写这种单线 我真的想知道别人的意见 请给我一些建议。感谢
答案 0 :(得分:6)
我会说,如果你牺牲了可读性,这是不好的做法。
答案 1 :(得分:1)
第一和第三个例子对我来说是可以接受的。它们足够接近应用程序域,因此我可以很容易地看到代码的意图。
第二个例子太聪明了。我甚至都不知道它的目的。你可以用五行重写它,给变量更长的名字吗?
答案 2 :(得分:1)
众所周知,源代码只能编写一次,但会被不同的人多次读取。因此,为常见情况优化源代码是明智的:阅读,尝试理解。
我的建议:按照这个原则行事。问问自己:任何人都可以更容易地理解我的任何代码吗?如果答案不 100%"不,我甚至无法想出更好的方式来表达问题/解决方案。"然后遵循你的直觉,重新格式化或重新编码那部分。
答案 3 :(得分:1)
除非性能是主要考虑因素,否则代码的可读性应该被赋予高度优先级。它的可维护性非常重要。
“计算机程序结构与解释”一书的相关引用。
“程序应该写给人们阅读,并且只是偶然让机器执行。”