**kwds behavior?
Bengt Richter
bokr at oz.net
Tue Sep 2 23:56:50 EDT 2003
More information about the Python-list mailing list
Tue Sep 2 23:56:50 EDT 2003
- Previous message (by thread): **kwds behavior?
- Next message (by thread): **kwds behavior?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2 Sep 2003 07:52:22 -0700, JoeyTaj at netzero.com (Paradox) wrote: >Why does the following attempts to pass in keywords arguments not >work. It would be alot cooler if there was a way to not have to have >the function defined with the variable name. It really seems to me >that the 3rd function should work. Does anyone know how to accomplish >something like this. >def testKeywords1 (**kwds): > print x > >def testKeywords2 (**kwds): > locals().update(kwds) > print x > >def testKeywords3 (**kwds): > locals().update(kwds) > def testNested(): > print x > testNested() > >dict = {} >dict['x'] = 5 ># doesn't work >testKeywords1(**dict) ># doesn't work >testKeywords2(**dict) ># doesn't work >testKeywords3(**dict) A couple of other things that might relate to what you want: >>> def testkw(**kw): ... exec 'print x' in kw ... >>> testkw(x='did it work?') did it work? Guess so, but >>> testkw(y='did it work?') Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in testkw File "<string>", line 1, in ? NameError: name 'x' is not defined Note that that's a NameError, not a KeyError, as in: >>> def testkw1(**kw): ... print '%(x)s' % kw ... >>> testkw1(x='did it work?') did it work? Ok, but >>> testkw1(y='did it work?') Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in testkw1 KeyError: 'x' Yet another way ... >>> def testkw2(**kw): ... ns = type('',(),kw)() ... print ns.x ... >>> testkw2(x='did it work?') did it work? >>> testkw2(y='did it work?') Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in testkw2 AttributeError: '' object has no attribute 'x' Or silliness, >>> def testkw3(**kw): ... exec """ ... def foo(): ... print x ... """ in kw ... kw['foo']() ... >>> testkw3(x='did it work?') did it work? >>> testkw3(y='did it work?') Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 6, in testkw3 File "<string>", line 3, in foo NameError: global name 'x' is not defined So what are you actually trying to do? Regards, Bengt Richter
- Previous message (by thread): **kwds behavior?
- Next message (by thread): **kwds behavior?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list