En Tue, 13 Oct 2009 13:05:03 -0300, Chris Withers <ch...@simplistix.co.uk>
escribió:
What I'd be looking for is something like:
locals()[name]=value
...or, say:
setattr(<somethingspecial>,name,value)
Now, I got horribly flamed for daring to be so heretical as to suggest
this might be a desirable thing in #python, so I thought I'd ask here
before trying to take this to python-dev or writing a PEP:
- what is so wrong with wanting to set a variable in the local namespace
based on a name stored in a variable?
In principle, nothing. But the local namespace is highly optimized: it is
not a dictionary but a fixed-size C array of pointers. It's not indexed by
name but by position. This can be done because the compiler knows (just by
static inspection) which names are local and which aren't (locals are the
names assigned to).
If you could add arbitrary names to the local namespace, the optimization
is no more feasible. That's why "from foo import *" issues a warning in
2.x and is forbidden in 3.x, and locals() isn't writable in practice.
- have I missed something that lets me do this already?
Use your own namespace. You may choose dict-like access, or attribute-like
access:
class namespace:pass
ns = namespace()
ns.order = .....
setattr(ns, variablename, ......)
ns.area = ns.height * ns.width
-----------
ns = {}
ns['order'] = ...
ns[variablename] = ...
ns['area'] = ns['height'] * ns['width']
Or, see some recent posts about "dictionary with attribute-style access".
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list