creating dictionnaries

Michael P. Reilly arcege at shore.net
Wed Jun 23 12:50:26 CEST 1999


Michael Hudson <mwh21 at cam.ac.uk> wrote:
: "Michael P. Reilly" <arcege at shore.net> writes:

:> Christian Caremoli <Christian.Caremoli at der.edf.fr> wrote:
:> : Hi,
:> : Dictionnaries can be created like that :
:> : d={'a':1,'b':2}
:> 
:> : By calling a function you create a dictionnary like that :
:> : def f(**d):
:> :    return d
:> 
:> : d=f(a=1,b=2)
:> 
:> : I would like to be able to create dictionnaries with some similar syntax
:> : like keyed tuples :
:> : d=(a=1,b=2)
:> 
:> : Is there a way to do that ?
:> 
:> In a word, No.  The structure of the language would perform a namespace
:> lookup on "a" and "b" instead of taking them as strings.  Also a tuple
:> is still an expression, and Python does not allow assignments inside
:> expressions.  This means that you would get a SyntaxError exception
:> during bytecode compilation.  And even if you didn't, it would be
:> likely that you would get a NameError exception.
:> 
:>   -Arcege
:> 
:> Note: I haven't looked at bytecodehacks, but that might let you do what
:> you wish.  Since it would be extremely non-portable, I wouldn't suggest
:> it for published or long-term code.

: What? byecodehacks can't affect syntax! I'm quite proud of that bit of
: code, but lets not blow it up into things it just isn't...

: yours,
: Michael

I only said might.. my thought was to splice a CALL_FUNCTION op in
where the expression was.  I did say that I haven't looked at the
module so I wasn't sure of it's capabilities, or if it worked inside
the parser or in the eval loop, but it seemed to be a reasonably
possible capability.

  -Arcege

PS: From what I've heard of the module, you should be proud of it.





More information about the Python-list mailing list