Search code examples
pythonindentation

Correct way to indent function calls in python


Suppose I am declaring some variables like this (I think it's too much indentation):

httpd = Server(
    (
        "",
        conf.port
    ),
    Handler
)

I could do it like this, but it is not very readable:

httpd = Server(("", conf.port), Handler)

or like this (the way in between):

httpd = Server(
    ("", conf.port),
    Handler
)

And some people are even doing it like this (which is the worst I think):

httpd = Server(
    ("",
        conf.port),
    Handler)

Question

Is there any rule / guide which of these variants should be used with which number of arguments ? There is a difference between

var = function(with="with", many="many",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
              argu="argu", ments="ments",
)

and

var = function(argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", ments="ments",
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
              argu="argu", ments="ments", argu="argu", ments="ments", argu="argu", 
)

Solution

  • As for a guide to these, there is one here: https://www.python.org/dev/peps/pep-0008/#indentation

    For your specific case I would recommend using:

    httpd = Server(
        ("", conf.port),
        Handler
    )
    

    and group ("", conf.port) on its own line to differentiate it from Handler.