Search code examples
pythonpython-3.xrefactoringpython-3.7one-liner

How to make my small code of oneliner into multiliner in python3?


I mistakely onelinerized a piece of code, by using this Onelineizer and now am stuck trying to make it multiliner.

(lambda __after: [__after() for self.argv.domain in [(parsed_url.netloc)]][0] if parsed_url.netloc and not self.argv.domain else __after())(lambda: None)

self.argv is parser.parse_url() from argparse and parsed_url is from urllib.parse import urlparse; parsed_url = urlparse(someurl). I think the code might been have written something like this:

if parsed_url.netloc and not self.argv.domain:
  something

I cant deduce more, could someone help me make it readable again. Also, __after() is not a function defined by me, its added by that tool.


Solution

  • Onelinerizer uses a list comprehension to translate assignment statements:

    [__after() for self.arg.domain in [(parsed_url.netloc)]][0]
    

    is equivalent to:

    self.arg.domain = parsed_url.netloc
    __after()
    

    so your entire line is equivalent to:

    if parsed_url.netloc and not self.argv.domain:
        self.arg.domain = parsed_url.netloc