"Frank" <[EMAIL PROTECTED]> writes:

> >>> import random
> >>> print random.randrange(10)
> 8
> >>>
>
> Everything is fine.
>
> >>> import random
> >>> from numpy import *
> >>>
> >>> print random.randrange(10)
> Traceback (most recent call last):
>  File "<stdin>", line 1, in ?
> AttributeError: 'module' object has no attribute 'randrange'
> >>>
>
> Here it does not work.

"Don't do that, then."

More specifically, 'from foo import *' is deprecated for exactly the
reason you found here: you risk clobbering an existing name in the
current namespace, and there's no way to determine that by looking at
the code.

Instead, import modules preserving a module namespace, which is the
behaviour you get from 'import foo'. That way, all names remain
explicit and you can see where you might be re-binding an existing
name.

    >>> import random
    >>> random
    <module 'random' from '/usr/lib/python2.4/random.pyc'>
    >>> import numpy
    >>> random
    <module 'random' from '/usr/lib/python2.4/random.pyc'>
    >>> numpy.random
    <module 'numpy.random' from 
'/usr/lib/python2.4/site-packages/numpy/random/__init__.pyc'>

Alternatively, if you want *specific* attributes from a module or
package to be in the current namespace, import them explicitly by
name; the same applied above, that you can see which names in
particular are being re-bound.

    >>> import random
    >>> random
    <module 'random' from '/usr/lib/python2.4/random.pyc'>
    >>> from numpy import random
    >>> random
    <module 'numpy.random' from 
'/usr/lib/python2.4/site-packages/numpy/random/__init__.pyc'>

Again: don't use 'from foo import *', without knowing exactly why
you're doing it. 'import foo' or 'from foo import bar' are always
available, and usually better.

-- 
 \       "I always wanted to be somebody. I see now that I should have |
  `\                              been more specific."  -- Lily Tomlin |
_o__)                                                                  |
Ben Finney

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to