Optimizing Python

Guido.van.Rossum@cwi.nl
Tue, 26 Oct 1993 10:59:35 +0100

Tim Peters brings up another interesting

> Question: In the absence of a
> from something import *
>
> statement, are there other cases where Python cannot (in principle, & at
> compile time) tell whether the name 'range' denotes the built-in? This
> is the tip of a much broader question, relevant a few years down the
> road, when Python has taken over much of the world & I'll be thinking of
> making a living by selling an optimizing Python compiler <smile>.

Actually, since built-in names come after module-global names, it is
always possible to sabotage a module by doing something like

def sick_range(n):
return range(1, n+1)

import foobar
foobar.range = sick_range

print foobar.innocent_function()

Depending upon the use that foobar.innocent_function() makes of
range() this could have no effect, a benign effect, a humorous effect,
or a disastrous effect...

A global scan of all modules might prove that there is no redefinition
of 'range' anywhere, but a single use of exec or even setattr may make
everything uncertain again...

--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>