在python中导入模块时会发生什么

时间:2011-09-21 05:36:07

标签: python import code-organization

我关注用例:

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 个答案:

答案 0 :(得分:4)

模块c.py必须导入b才能使其工作...... 导入模块时,它会被添加到仅在当前脚本范围内可用的globals-dictionary中(使用“globals()”来打印其内容)

答案 1 :(得分:2)

您必须添加要在该脚本中使用的所有模块。

在函数参数中传递该模块的其他方法,然后可以调用该模块方法。

另一种方法是在_ _ builtins _ _中添加它,这在other post中更好解释

答案 2 :(得分:1)

您已将b和c添加到a模块,但不是c模块。当您在模块内时,您只能看到添加到模块中的内容。 b和c被添加到sys.modules中,但是你没有导入sys,并且你没有使用sys.modules ['b']。