С риском звучать легкомысленно, правило довольно простое: если имя не было определено в модуле, оно просто не существует.
Посмотрите на этот модуль:
def some_function():
print str(x)
Он не определяет x
, поэтому имя не существует в этом модуле. Если вы определите x
в другом модуле, он все равно не будет существовать в этом модуле. Даже если вы импортируете этот модуль в другой модуль, который определяет x
, x
все равно не будет существовать в этом модуле.
Там нет "глобального global
" пространства имен. Каждый модуль имеет свое собственное пространство имен global
. Имена никогда не делятся неявно между модулями, они всегда должны быть явно импортированы.
Единственное исключение из этого - builtins
, которое - для удобства - не нужнобыть явно импортированным.