2013-11-15 4 views
1

Я пытаюсь использовать глобальную переменную в модулях, импортируя переменную и изменяя ее локально внутри функции. Код и вывод ниже. Последний вывод не тот, который я ожидал, я думал, что это должно быть 15, поскольку он уже был изменен в глобальной области действия func3. Может кто-нибудь объяснить, почему последний выход все равно 10.Общее поведение ключевого слова Python

Спасибо!

test2.py

myGlobal = 5 
def func3(): 
    global myGlobal 
    myGlobal = 15 
    print "from 3: ", myGlobal 

test1.py

from test2 import myGlobal, func3 

def func1(): 
    global myGlobal 
    myGlobal = 10 

def func2(): 
    print "from 2: ", myGlobal 

print "init: ", myGlobal 
func1() 
func2() 
func3() 
func2() 

Выходы:

init: 5 
from 2: 10 
from 3: 15 
from 2: 10 
+0

'func3' сам использует' myGlobal' не импортированный 'myGlobal' в' test1.py' – Farhadix

+5

В Python нет истинных глобальных переменных; модуль имеет свое «глобальное» пространство имен. Вы можете явно изменить 'test2.myGlobal', но ключевое слово' global' не позволит вам переписывать имена в другом модуле. – geoffspear

+2

Пожалуйста, не пишите такой код, это не нужно, что делает код сложнее рассуждать, и его сложнее проверить. –

ответ

0

Как указано в комментариях, global в Python означает уровень модуля.

Так делают:

a = 1 

имеет тот же эффект на a как:

def f(): 
    global a 
    a = 1 
f() 

И в обоих случаях переменная не разделяемых между разными модулями.

Если вы хотите разделить переменную через модули, проверьте this.

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