Espacios de nombres con importación de módulos
Estoy aprendiendo Python y todavía soy un principiante, aunque lo he estado estudiando durante aproximadamente un año. Estoy tratando de escribir un módulo de funciones que se llama dentro de un módulo principal. Cada una de las funciones en el módulo llamado necesita el módulo matemático para ejecutarse. Me pregunto si hay una manera de hacerlo sin importar el módulo matemático dentro del módulo llamado. Esto es lo que tengo:
main.py
:
from math import *
import module1
def wow():
print pi
wow()
module1.cool()
module1.py
:
def cool():
print pi
Cuando se ejecutamain.py
Yo obtengo:
3.14159265359
Traceback (most recent call last):
File "Z:\Python\main.py", line 10, in <module>
module1.cool()
File "Z:\Python\module1.py", line 3, in cool
print pi
NameError: global name 'pi' is not defined
Lo que me cuesta entender es por qué me sale un error de nombre al ejecutarmain.py
. Se que la variablepi
se convierte en global para el módulo principal en la importación porquewow
Puede acceder a ella. Tambien se quecool
se convierte en global para el módulo principal al importar porque puedo imprimirmodule1.cool
y obten<function cool at 0x02B11AF0>
. Entonces desdecool
está dentro del espacio de nombres global del módulo principal, ¿no debería el programa mirar primero dentro de la función?cool
para la variablepi
, y luego cuando no lo encuentre allí, mire adentromain
módulo para la variablepi
yEncuéntralo ¿ahí?
La única forma de evitar esto es saber el módulo matemático que se encuentra dentromodule1.py
. No me gusta la idea de eso, sin embargo, porque hace las cosas más complicadas y soy un fanático del código simple y agradable. Siento que estoy cerca de comprender los espacios de nombres, pero necesito ayuda en este caso. Gracias.