Почему в импортированных функциях недоступно глобальное пространство имён?
Есть два файла: file1.py
a = 123
from file2 import foo
def bar():
print(a)
print(globals())
bar()
foo()
И file2.py
def foo():
print(a)
Вывод globals()
показывает, что a
, foo
и bar
находятся в одном пространстве имён:
{... 'a': 123, 'foo': <function foo at 0x0000021C8D5F5940>, 'bar': <function bar at 0x0000021C8D5F58B0>}
Тем не менее, bar()
работает, а foo()
выдаёт ошибку:
Traceback (most recent call last):
File "F:\Информация\Programs\Sort\Kodex\file1.py", line 10, in <module>
foo()
File "F:\Информация\Programs\Sort\Kodex\file2.py", line 3, in foo
print(a)
NameError: name 'a' is not defined
Я читал во многих местах, что при импорте модуля python выполняет весь код в нём. В чём тогда причина такой дискриминации?
Знаю, что такой код не пишут в реальных проектах. Меня интересует именно техническая сторона данной ошибки. Почему в импортированных функциях недоступно глобальное пространство имён (даже если сами функции находятся в нём)? Почему область видимости ограничена только file1.py
?