Namespaces com importações de módulo
Eu estou aprendendo Python e ainda sou um iniciante, embora eu tenha estudado por cerca de um ano. Eu estou tentando escrever um módulo de funções que é chamado dentro de um módulo principal. Cada uma das funções no módulo chamado precisa que o módulo matemático seja executado. Eu estou querendo saber se há uma maneira de fazer isso sem importar o módulo de matemática dentro do módulo chamado. Aqui está o que eu tenho:
main.py
:
from math import *
import module1
def wow():
print pi
wow()
module1.cool()
module1.py
:
def cool():
print pi
Quando corrermain.py
Eu recebo:
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
O que estou tendo dificuldade em entender é por que recebo um erro de nome ao executarmain.py
. Eu sei que a variávelpi
torna-se global para o módulo principal na importação porquewow
pode acessá-lo. Eu também sei quecool
torna-se global para o módulo principal após a importação porque eu posso imprimirmodule1.cool
e pegue<function cool at 0x02B11AF0>
. Então desdecool
está dentro do namespace global do módulo principal, o programa não deve procurar primeiro dentro da funçãocool
para a variávelpi
e quando não encontrar, olhe para dentromain
módulo para a variávelpi
eencontre lá?
A única maneira de contornar isso que eu sei é importar o módulo de matemática dentromodule1.py
. Eu não gosto da ideia disso, apesar de que isso torna as coisas mais complicadas e eu sou fã de código simples e agradável. Eu sinto que estou perto de entender namespaces, mas preciso de ajuda para isso. Obrigado.