Python handles globals badly.
rosuav at gmail.com
Fri Sep 11 17:55:28 CEST 2015
On Sat, Sep 12, 2015 at 1:49 AM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
>> And that's the thing... I think. It's using locals(), which starts out
>> as a copy of the function's locals (in this example, empty), but
>> without assignment affecting anything. Which is more than a little
>>>>> def f():
>> ... x = 
>> ... exec("print(x); x = 2; print(x); x = ; print(x)")
>> ... print(x)
> Ah, that makes sense. It's writing into the dict that is created and
> returned by locals(), but not actually updating the frame locals which
> are the source of truth.
Yeah... but it only makes sense to people who understand the
implementation. It's certainly not a logical and sane behaviour that
would be worth documenting and using.
More information about the Python-list