2016-05-24 3 views
0

Я пытаюсь использовать глобальную переменную, и как-то я заканчиваю двумя версиями этой переменной. Может ли кто-нибудь увидеть, как это может произойти?Получение нескольких версий глобальной переменной

Мой упрощенный сценарий выглядит следующим образом

a/ 
init.py 
b/ 
    init.py 
    file1.py 
    file2.py 

Мой первый init.py имеет

from b.file1 import * 
from b.file2 import * 

В file1.py У меня есть __all__=[stuff, global_variable] и следующие

global_variable = None 
def doit(): 
    global global_variable 
    global_variable = 1 
    print("set global variable to %s" %(global_variable)) 

Так, наконец, когда я делаю это :

import a 
a.doit() 
print(a.global_variable) 

Я вижу

set global variable to 1 
None 
+3

'импорт *' делает области видимости локальной версии (то есть копии) модуля-глобальный .. – thebjorn

+1

Все «глобальные» переменные в Python являются глобальными для модуля они импортируются. 'import *' создает глобальную переменную * new * в модуле импорта, которая никак не связана с переменной в модуле, из которого он был импортирован. – BrenBarn

+0

ОК, это решает тайну, кто-нибудь знает, где в документах Python это документировано? –

ответ

3

От official tutorial:

Хотя некоторые модули предназначены для экспорта только имена, которые следуют определенным шаблонам при использовании импорта *, она до сих пор считается плохой практикой в производственном коде.

Помните, что нет ничего плохого в использовании пакета import specific_submodule! На самом деле это рекомендуемая нотация, если модуль импорта не должен использовать подмодули с тем же именем из разных пакетов.

Акцент добавлен.

Синтаксис from module import * не рекомендуется (также смотрите this question). Попробуйте альясинга каждый модуль в своем собственном пространстве имен лаконичной:

import b.file1 as f1 
import b.file2 as f2 
Смежные вопросы