I saw the following code:
def __init__(self, fn, **kw):
     [setattr(self,k,v) for (k,v) in kw.items()]
     ......
What does the input argument **kw mean?
I saw the following code:
def __init__(self, fn, **kw):
     [setattr(self,k,v) for (k,v) in kw.items()]
     ......
What does the input argument **kw mean?
 
    
     
    
    kw is bound to a dict mapping keyword argument names to their values.
Try calling
def return_kwargs(**kw):
    return kw
as return_kwargs(foo=1, bar="2", baz="hamspamspam").
 
    
    Suppose you have a dict kw = {'a':1,'b':2}, then calling myfunction(**kw) is equivalent to calling myfunction(a=1,b=2).
 
    
    This particular construction means what all keyword arguments for the constructor will end up as object attributes.
foo = Foo( func, bar = 1, baz = "aa" )
this would create an object with attribute "bar" set to 1 and "baz" to "aa"
 
    
    Inside the function, kw is a dictionary that contains all the keyword=value arguments that you gave to your function:
def demo(**kw):
    print kw
demo(a=1, b="hello")
Run the above and it will display a dictionary with two keys, a and b. So it works as a way to accept any keyword argument you decide to use when you call the function.
That's what it does. Why would anyone want to do that? Perhaps in a function that calls another function (given as a separate argument), and **kw is to hold options for the second function.
