[wxPython-users] Re: OT - how to create variables from a cvs
file?
Mel Wilson
mwilson at the-wire.com
Wed Mar 28 07:34:16 PDT 2007
Christian wrote:
> jmf wrote:
>> locals() beeing the dict containing the vars...
>>
>>>>> li = ['field1', 'field2', 'field3']
>>>>> for e in li:
>> locals()[e] = None
>>>>> print field1
>> None
>>>>> print field2
>> None
>>>>> print field3
>> None
>
> I read somewhere that both globals() and locals() are not meant for writing. So
> this might or might not work always.
AFAIK, the dictionary returned by globals() is used to look up global
variables, and adding an entry will add a variable.
However, the dictionary returned by locals() is usually a made-up
dictionary which gives access to local variables, but isn't consulted
by the Python interpreter. Inside functions, local variables are
accessed through a pre-compiled array of references (the decompiled
code for a small function will show this) so changing a locals()
dictionary changes nothing.
Outside any function, a call to locals() returns a reference to the
same dictionary returned by globals(), so the example above works.
Consider
Python 2.4.2 (#1, Jan 23 2006, 21:24:54)
[GCC 3.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f():
... d = locals()
... d['a'] = 1
... d['b'] = 2
... print a, b
...
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 5, in f
NameError: global name 'a' is not defined
>>>
Mel.
More information about the wxpython-users
mailing list