2015-08-06 4 views
0

Я новичок в python и начал с некоторого базового примера и нашел вопрос, который заключается в том, что импортированный модуль python будет иметь прямой доступ к глобалам в модуле, который импортирует его, или наоборот ,Глобальные переменные в модулях в python

Ниже мой код:

x.py

import y 

def f(): 
    global x 
    x = 6 
    print(x) 

def main(): 
    global x 
    x = 3 
    print(x) 
    f() 
    y.g() 

if __name__ == '__main__': 
    main() 

y.py

def g(): 
    global x 
    x += 1 
    print(x) 

Ниже приводится отслеживающий:

3 
6 


    Traceback (most recent call last): 
     File "C:\Users\abc\Desktop\x.py", line 16, in <module> 
     main() 
     File "C:\Users\abc\Desktop\x.py", line 13, in main 
     y.g() 
     File "C:\Users\abc\Desktop\y.py", line 3, in g 
     x += 1 
    NameError: name 'x' is not defined 

ответ

1

"Глобальная переменная" в Python означает глобальный relati до модуля. У вас есть переменная x.x, которая определена, и переменная y.x, которая не определена и создает ошибку при попытке получить ее содержимое. Если вы хотите получить доступ к глобалам другого модуля, вам придется явно импортировать этот модуль (хотя возиться с глобальными глобальными модулями почти всегда является плохой практикой).

Для справки см., Например, Python docs:

Если global утверждение происходит в блоке, все виды использования названия, указанные в заявлении, обратитесь к связыванию этого имени в пространстве имен верхнего уровня. Имена разрешаются в пространстве имен верхнего уровня путем поиска глобального пространства имен, то есть пространства имен модуля, содержащего блок кода, и пространства имён встроенных элементов, пространство имен модуля встроено. Сначала выполняется поиск глобального пространства имен. Если имя не найдено, выполняется поиск пространства имен builtins. Оператор global должен предшествовать всем использованиям имени.

+0

спасибо. Теперь я понял. –