使用python导入模块(3个模块)

时间:2019-05-21 14:18:23

标签: python python-2.7

假设我在同一目录中有3个模块。 (模块1,模块2,模块3)

假设第二个模块导入了第三个模块,那么如果我在模块1中导入了module2,那会自动将模块3导入到模块1吗?

谢谢

3 个答案:

答案 0 :(得分:1)

不。导入仅在模块内部工作。您可以通过创建测试来验证。

# module1
import module2

# module2
import module3

# in module1
module3.foo() # oops

这是合理的,因为您可以反过来思考:如果导入导致导入链,则很难确定哪个功能来自哪个模块,从而导致复杂的命名冲突。

答案 1 :(得分:0)

否,除非您明确指定python,否则它将不会被导入,

from module2 import *

答案 2 :(得分:0)

导入在概念上概述如下。

import some_module

上面的陈述等同于:

module_variable = import_module("some_module")

到目前为止,我们所做的只是将某些对象绑定到变​​量名称。 在实现import_module时,也不难掌握。

def import_module(module_name):
  if module_name in sys.modules:
      module = sys.modules[module_name]
  else:
      filename = find_file_for_module(module_name)
      python_code = open(filename).read()
      module = create_module_from_code(python_code)
      sys.modules[module_name] = module
  return module

首先,我们检查模块是否之前已导入。如果是这样,那么它将在所有模块的全局列表(sys.modules)中可用,因此将被简单地重用。在模块不可用的情况下,我们从代码中创建它。函数返回后,模块将分配给您选择的变量名称。如您所见,该过程并非效率低下或浪费。您要做的只是为模块创建别名。在大多数情况下,首选透明性,因此快速浏览文件顶部可以告诉您哪些资源可用。否则,您可能最终会想知道给定资源的来源。因此,这就是为什么您不会固有地“导入”模块的原因。

资源: Python doc on importing