Search code examples
coding-style

Is it a bad practice writing long one-liner code?


I found myself keep writing pretty long one-liner code(influenced by shell pipe), like this:

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

I felt ok when I written it.
I thought long one-liner code is a functional-programming style.
But, several hours later, I felt bad about it.
I'm afraid I would be criticized by people who may maintain it.
Sadly, I've get used to writing these kind of one-liner.
I really want to know others' opinion.
Please give me some advice. Thanks


Solution

  • (Update 2022-03-25: My answer refers to a previous revision of the question.)

    The first and third examples are acceptable to me. They are close enough to the application domain so that I can easily see the intention of the code.

    The second example is much too clever. I don't even have an idea about its purpose. Can you rewrite it in maybe five lines, giving the variables longer names?