Search code examples
pythonparameter-passingkeyword-argument

In Python, what determines the order while iterating through kwargs?


In python, I wrote this function to teach myself how **kwargs works in Python:

def fxn(a1, **kwargs):
    print a1
    for k in kwargs:
        print k, " : ", kwargs[k]

I then called this function with

fxn(3, a2=2, a3=3, a4=4)

Here was the output that my Python interpreter printed:

3
a3  :  3
a2  :  2
a4  :  4

Why did the for loop print the value of a3 before that of a2 even though I fed a2 into my function first?


Solution

  • kwargs is a dictionary. Dictionaries are unordered - simply put, the order is unspecified and an implementation detail. Peeking under the hood will show that the order varies wildly depending on the hash values of the items, the order of insertion, etc. so you better don't rely on anything related to it.