anatoly techtonik added the comment:

Under the trace function, the dict is always updated, and that changed a 
workflow in the program I was debugging leading to heisenbug. But that's a 
different story. I'd like to concentrate on the reasons to rename locals() 
result type from 'dict' to 'livedict' (or other internal type with well-defined 
behavior).

dict() returned by locals() is sporadically updated. The problem is not with 
when it is updated, or how it is updated. The problem is that the fact that it 
is updated is not indicated in any way. And the problem that comes from this 
problem is that people don't realize that this dict may change its contents. As 
a result people become confused with Python.

The documentation is also ambiguous. Those people who don't know about 
self-updating behavior (I was) read "represents" like a "copy of symbol table", 
not like a "internally updated view of symbol table".

>From the OOP point of view, the object doesn't behave like a normal dict, and 
>it will be less confusing if it is renamed.


offtopic: "local execution namespace of a function call's stack frame" sounds 
cryptic - I am afraid that without visualization of 
local/global/namespace/scope/frame I am unable to understand that right now.

offtopic2: I also don't get "you should not expect changes to that dict to be 
reflected in the actual locals". I reads as if in some cases modifying the dict 
will change the locals. I thought that it is impossible as it is just a copy.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17546>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to