[Python-Dev] Re: opcode performance measurements
Samuele Pedroni
Samuele Pedroni" <pedroni@inf.ethz.ch
Thu, 31 Jan 2002 22:02:23 +0100
From: Jeremy Hylton <jeremy@alum.mit.edu>
> >>>>> "SP" == Samuele Pedroni <pedronis@bluewin.ch> writes:
>
> SP> Hi. Q about PEP 267 Does the PEP mechanims adress only
> SP> import a
> SP> use a.x
>
> SP> cases. How does it handle things like
> SP> import a.b
> SP> use a.b.x
>
> You're a smart guy, can you tell me? :-). Seriously, I haven't
> gotten that far.
>
> import mod.sub
> creates a binding for "mod" in the global namespace
>
> The compiler can detect that the import statement is a package import
> -- and mark "mod.sub" as a candidate for optimization. A use of
> "mod.sub.attr" in function should be treated just as "mod.attr".
>
> The globals array (dict-list hybrid, technically) has the publicly
> visible binding for "mod" but also has an internal binding for
> "mod.sub" and "mod.sub.attr". Every module or submodule attribute in
> a function gets an internal slot in the globals. The internal slot
> gets initialized the first time it is used and then shared by all the
> functions in the module.
>
> So I think this case isn't special enough to need a special case.
>
OK, I stated the wrong question. What happens if I do the following:
import a.b
def f():
print a.b.x
a.g()
print a.b.x
f()
Now a.g() change a.b from a submodule to an object with a x attribute.
Maybe this case does not make sense, but the point is that the PEP
is quite vague about imported stuff.
Samuele (more puzzled than smart).