Что происходит, когда модуль импортируется в python - PullRequest
1 голос
/ 21 сентября 2011

У меня следующий вариант использования:

a.py:

import b
import c

c.fun()

b.py:

def fun():
  print 'b'

c.py:

def fun():
  b.fun()

python a.py не работает.Он не работает с NameError: global name 'b' is not defined.

Мое понимание импорта в python было то, что имя добавляется в sys.modules.Если это так, то c.py также должен увидеть модуль b.Но, видимо, это не так.Так может кто-нибудь объяснить, что именно происходит при импорте модуля.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

Модуль c.py должен импортировать b, чтобы это работало ... При импорте модуля он добавляется в глобальный словарь, который доступен только в области действия текущего скрипта (используйте «globals ()» для печати его содержимого)

2 голосов
/ 21 сентября 2011

Вы должны добавить все модули, которые вы хотите использовать в этом скрипте.

Другой способ передать этот модуль в аргумент функции, и после этого вы можете вызвать метод этого модуля.

Другой способ - добавить его в _ _ builtins _ _, что лучше объяснить в другой пост

1 голос
/ 21 сентября 2011

Вы добавили b и c в модуль a, но не в модуль c.Когда вы находитесь внутри модуля, вы можете видеть только то, что было добавлено к нему.b и c добавляются в sys.modules, но вы не импортировали sys и не используете sys.modules ['b'].

...