what does this do? (really basic question)

Sean 'Shaleh' Perry shalehperry at attbi.com
Fri Mar 1 01:19:25 EST 2002


On 01-Mar-2002 Dave Marotti wrote:
> Hey,
> 
> Hopefully this is a really basic question.  I'm still in the learning phase,
> and came across this in a sample program:
> 
> class Whatever:
>     def __init__(self, user_list, cmd_list, **kw):
>         code....
> 
> What does the **kw mean (specifically, the **) ?
> 

the kw is a nmemonic for 'keyword'.

>>> def foo(**kw):
...   print kw
... 
>>> foo(a=3, b=6, c='Sean')
{'b': 6, 'c': 'Sean', 'a': 3}
>>> foo(c='David', a=42, b=25)
{'b': 25, 'c': 'David', 'a': 42}

the ** syntax means 'take every argument that was not matches elsewhere and
store it in a dictionary.  The key will be the variable name and the value will
be its value'.

So self, use_list, and cmd_list will get their values and then kw gets the rest.

>>> def bar(name, **kw):
...   print name
...   print kw
... 
>>> bar('Sean', a=1,b=2,c=3)
Sean
{'b': 2, 'c': 3, 'a': 1}
>>> def wuz(name, age):
...   print name
...   print age
... 
>>> wuz(age=25, name='Lesley')
Lesley
25

Note the key=value syntax works even without the **kw magic.

The advantage of using the key=value syntax is that it makes functions with
several arguments easier to call without reading the docs.  This is often handy
for things like GUI toolkits and network code:

win = MakeWindow(title="My Window", width=100, height=200, x=34, y=67)

or

socket = Network.Connect(url="http://www.python.org", keepalive=1, port=80)







More information about the Python-list mailing list