Я изучаю Python и до сих пор новичок, хотя я изучал его уже около года. Я пытаюсь написать модуль функций, который вызывается в основном модуле. Каждая из функций в вызываемом модуле нуждается в математическом модуле для запуска. Мне интересно, есть ли способ сделать это, не импортируя математический модуль внутри вызываемого модуля. Вот что я имею:
main.py:
from math import *
import module1
def wow():
print pi
wow()
module1.cool()
module1.py:
def cool():
print pi
При запуске main.py я получаю:
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
То, что мне трудно понять, - это то, почему я получаю ошибку имени при запуске main.py. Я знаю, что переменная pi становится глобальной для основного модуля при импорте, потому что wow может получить к ней доступ. Я также знаю, что cool становится глобальным для основного модуля при импорте, потому что я могу распечатать module1.cool и получить <function cool at 0x02B11AF0>. Так как cool находится внутри глобального пространства имен основного модуля, программа не должна сначала заходить в функцию cool для переменной pi, а затем, когда она ее не найдет, загляните внутрь main для переменной pi и найти ее там?
Единственный способ обойти это, о котором я знаю, - это импортировать математический модуль внутри module1.py. Мне не нравится идея этого, хотя, потому что это усложняет ситуацию, и я поклонник приятного простого кода. Я чувствую, что я близок к пониманию пространств имен, но мне нужна помощь в этом. Спасибо.