Bob, Kent

thanks for the suggestions. Bob made the comment "If there is no compelling requirement that myfunc's argument be in the form **kwargs ...", but I'm afraid I don't understand the difference between

myfunc (**kwargs)

and

myfunc (kwargs)

Would someone mind explaining this? I never managed to find a satisfactory explanation for what "**" means!

Alun Griffiths

> <[EMAIL PROTECTED]> wrote:
> > Hi
> >
> > I have a GUI program that extracts some information from the user as
> > strings, and I then want to use the strings to form an argument list to
> > another function.  Hopefully the following code gives some flavour:
> >
> > def myfunc(**kwargs):
> >    while kwargs:
> >        name, value = kwargs.popitem()
> >        print name, value
> >
> > myfunc(a=1, b=2, c=3, d=4)
> > arg_str = "a=1, b=2, c=3, d=4"
> > myfunc(arg_str)
> >
> > ARG_STR will be built up from the data extracted from the GUI.  I get
> this
> > error
> >
> > TypeError: myfunc() takes exactly 0 arguments (1 given)
> >
> > I understand that ARG_STR is a string and that MYFUNC is expecting
> something
> > else ,,, but not sure what it is.  I have tried various dictionary
> > configurations such as
> >
> > arg1 = ["a","b","c","d"]
> > arg2 = [1,2,3,4]
> > arg3 = dict(zip(arg1,arg2))
> > myfunc(arg3)
>

 myfunc(**arg3)

Let's back up to arg_str = "a=1, b=2, c=3, d=4"

To create a dictionary from that:

argDict = dict(pair.split('=') for pair in arg_str.split(','))

If there is no compelling requirement that myfunc's argument be in the form
**kwargs then

def myfunc(kwargs):
    while kwargs:
        name, value = kwargs.popitem()
        print name, value

myfunc(argDict)

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to