2017-02-10 1 views
0

У меня есть три файла. В первом я определяю глобальную переменную.Использовать и устанавливать глобальные переменные для нескольких мух в Python

# file1.py 
ABC = 111 

Во втором файле я изменяю содержимое глобальной переменной.

# file2.py 
from file1 import * 

def set_value(): 
    global ABC 
    ABC = 222 

В третьем файле, я пытаюсь использовать set_value(), определенный в file2.py изменить Contect глобальной переменной и распечатать его.

# file3.py 

from file1 import * 
from file2 import * 

set_value() 
print ABC 

Результат: 111 не 222. Новое значение не задано в глобальной переменной. Как установить глобальное значение в файле file1.py с помощью функции в файле2.py?

ответ

2

Линия from file1 import * делает две вещи:

  1. Он импортирует файл file1.py в кэш модуля.
  2. Он создает новые ссылки на все определенные символы в вашем локальном пространстве имен.

Поскольку у вас есть отдельные ссылки, вы не можете обновлять их в модуле. Если это переменные mutable, вы можете обновить их и просмотреть эти обновления в самом модуле. Например, если у вас есть ABC = [111], вы можете сделать ABC[0] = 222, и вы увидите изменение.

Если вы хотите изменить сам модуль, вам необходимо использовать ссылку на модуль; модули изменяемы!

# file2.py 
import file1 

def set_value(): 
    file1.ABC = 222 

.

# file3.py 

import file1 
from file2 import * 

set_value() 
print file1.ABC 
+0

Приятно объяснено! – DaveBensonPhillips

0

Вы действительно не хотите использовать глобальное ключевое слово для этого. Подобно распределению глобального состояния с пустым классом объектов, вы можете создать пустой модуль, с помощью которого вы можете назначать атрибуты, которые будут следовать за ним, где бы он не был импортирован. См "How do I share global variables across modules?" от Python3 ЧаВО

Смежные вопросы