I am creating a module in python that can take multiple arguments. What would be the best way to pass the arguments to the definition of a method? 

def abc(arg):
    ...

abc({"host" : "10.1.0.100", "protocol" : "http"})


def abc(host, protocol):
    ...

abc("10.1.0.100", "http")


def abc(**kwargs):
    ...

abc(host = "10.1.0.100", protocol = "http")

Or something else?
Edit
I will actually have those arguments (username, password, protocol, host, password2) where none of them are required.
If all the arguments are known ahead, use an explicit argument list, optionally with default values, like def abc(arg1="hello", arg2="world",...). This will make the code most readable.
When you call the function, you can use either abd("hello", "world") or abc(arg1="hello", arg2="world"). I use the longer form if there are more than 4 or 5 arguments, it's a matter of taste.
What is the best way to pass multiple parameters to class init in python?