[Tutor] Random Number Question
Peter Otten
__peter__ at web.de
Thu Nov 25 22:14:23 CET 2010
Alan Gauld wrote:
>>>> import random
>
> It tries to import itself, which then tries to import itself,
> which then..... infinite loop time...
I think it's more like
- look up module random in sys.modules
- module random not found in sys.modules; locate the file random.py
- file random.py found, create a new empty module object and put it into
sys.modules
- execute code loaded from random.py, encounter 'import random', look up
random in sys.modules
- module random found in sys.modules, bind it to the name 'random' in itself
- continue execution of random.py code. This will succeed unless you try to
access random.some_name for a name not already defined.
In short: you are more likely to get an AttributeError than infinite
recursion.
$ cat module.py
print "importing", __name__
import module
print module.yadda
yadda = 42
$ python -c'import module'
importing module
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "module.py", line 3, in <module>
print module.yadda
AttributeError: 'module' object has no attribute 'yadda'
$ cat module2.py
print "importing", __name__
yadda = 42
import module2
print module2.yadda
$ python -c'import module2'
importing module2
42
While the latter "works" as in "runs without error" it still isn't a good
idea.
By the way, you can generalise the above to arbitrary circular imports where
module a imports b which imports c which imports ... which imports z which
imports a.
Peter
More information about the Tutor
mailing list