Przestrzenie nazw z importem modułów
Uczę się Pythona i nadal jestem początkującym, chociaż studiuję go od około roku. Próbuję napisać moduł funkcji, który jest wywoływany w module głównym. Każda z funkcji w wywoływanym module wymaga uruchomienia modułu matematycznego. Zastanawiam się, czy istnieje sposób, aby to zrobić bez importowania modułu matematycznego wewnątrz wywoływanego modułu. Oto co mam:
main.py
:
from math import *
import module1
def wow():
print pi
wow()
module1.cool()
module1.py
:
def cool():
print pi
Podczas biegumain.py
Dostaję:
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
Trudno mi zrozumieć, dlaczego podczas uruchamiania otrzymuję błąd nazwymain.py
. Wiem, że zmiennapi
staje się globalny do głównego modułu po zaimportowaniu, ponieważwow
może uzyskać do niego dostęp. Też to wiemcool
staje się globalny do głównego modułu po zaimportowaniu, ponieważ mogę drukowaćmodule1.cool
i dostać<function cool at 0x02B11AF0>
. Od tego czasucool
znajduje się w globalnej przestrzeni nazw głównego modułu, czy program nie powinien najpierw zajrzeć do funkcjicool
dla zmiennejpi
, a potem, kiedy go tam nie znajdzie, zajrzyj do środkamain
moduł dla zmiennejpi
iZnajdź to tam?
Jedynym sposobem obejścia tego, o czym wiem, jest zaimportowanie modułu matematycznego do środkamodule1.py
. Nie podoba mi się ten pomysł, ponieważ sprawia to, że jest to bardziej skomplikowane i jestem fanem miłego, prostego kodu. Czuję, że jestem blisko uchwycenia przestrzeni nazw, ale potrzebuję pomocy w tej sprawie. Dzięki.