假设我在同一目录中有3个模块。 (模块1,模块2,模块3)
假设第二个模块导入了第三个模块,那么如果我在模块1中导入了module2,那会自动将模块3导入到模块1吗?
谢谢
答案 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)中可用,因此将被简单地重用。在模块不可用的情况下,我们从代码中创建它。函数返回后,模块将分配给您选择的变量名称。如您所见,该过程并非效率低下或浪费。您要做的只是为模块创建别名。在大多数情况下,首选透明性,因此快速浏览文件顶部可以告诉您哪些资源可用。否则,您可能最终会想知道给定资源的来源。因此,这就是为什么您不会固有地“导入”模块的原因。