ну, позвольте мне объяснить, что происходит, когда вы импортируете что-то из одного скрипта в другой. когда вы пишете:
from second import *
, он копирует имена из second.py
в пространство имен first.py
. Итак, если вы переназначаете любую переменную second.py
(в вашем случае answer
) в first.py
, изменение будет выполнено только в first.py
, а не в second.py
. Итак, я надеюсь, вы поняли, что first.py's
answer
и second.py's
answer
каждый из них занимал разные места в памяти. Для вашего понимания я написал тест, прочитайте код и посмотрите результат, вы поймете, что происходит, когда вы что-то импортируете:
second.py
answer = 0 # you've to declare "answer" as as global variable
# this is one mistake you've done in your code
def function(one, two):
global answer
answer = one + two
def print_answer_in_second():
print("in second: {}".format(answer))
first.py :
from second import *
print("in first: {}".format(answer))
print_answer_in_second()
function(10, 30) # calling function() to change answer value in second.py
print("in first: {}".format(answer))
print_answer_in_second()
answer = 100 + 800; # changing answer value in first.py
print("in first: {}".format(answer))
print_answer_in_second()
output :
in first: 0
in second: 0
in first: 0
in second: 40
in first: 900
in second: 40
Надеюсь, вы уловили идею импорта.
Итак, как мы можем красиво решить эту проблему? Глобальные переменные являются неотъемлемой частью языка, мир программирования не может работать без globals
. Но globals
тоже создают проблемы. Сложно поддерживать globals
. Итак, что было бы лучше всего с globals
?
Ну, если вы разрабатываете приложение или какой-либо проект, лучше всего поместить globals
вашего приложения или проекта в один файл , так что мы можем легко найти их и изменить их значения. Назовем наш global file
glob.py
. Вот код для glob.py
:
glob.py:
# declaring global answer
answer = 0
Теперь давайте объявим new_second.py
:
new_second.py :
import glob
def function(a, b):
glob.answer = a + b
def print_answer_in_second():
print("In second: {}".format(glob.answer))
new_first.py :
import glob
from new_second import function, print_answer_in_second
# note: "import ... from *" is a very bad practice
# so, avoid use that style of import
function(10, 30)
print("In first: {}".format(glob.answer))
print_answer_in_second()
вывод :
In first: 40
In second: 40
Надеюсь, вы получили представление о том, как правильно использовать globals
, не затрагивая слишком сильно другие части вашего кода.