Я изучаю 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
. Мне не нравится идея этого, хотя, потому что это усложняет ситуацию, и я поклонник приятного простого кода. Я чувствую, что я близок к пониманию пространств имен, но мне нужна помощь в этом. Спасибо.