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.

Respuestas a la pregunta(5)

Su respuesta a la pregunta