[Python-ideas] Allow function __globals__ to be arbitrary mapping not just dict

Robert Kern robert.kern at gmail.com
Sun Mar 18 18:47:35 CET 2012

On 3/18/12 5:26 PM, Terry Reedy wrote:
> On 3/18/2012 8:27 AM, Steven D'Aprano wrote:

>> I propose to allow function.__globals__ to accept any mapping type.
> The important question is whether the current ceval code in merely a holdover
> from ancient days when dict was the only mapping type and the user function type
> was not accessible to users, or whether the direct dict access is an important
> speed optimization that affects essentially all code run on cpython. If not done
> already, experiments are needed to assess the degree of slowdown.

At one time, both the locals and globals dictionaries used by exec and eval() 
were required to be true dicts, but this restriction was loosened for the locals 
mapping but not the globals. This distinction is documented in the language 
reference. You can probably find the original discussions for the reasons why 
the restriction on globals dicts remained; I don't remember the details, but it 
wasn't just an oversight.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

More information about the Python-ideas mailing list