-4
#file cf.py
a=1      
import cf
print(cf.a)
  1. 为什么在它的模块中导入操作不循环(导入模块本身)?
  2. 为什么打印指令在 IDLE 中执行 2 次,在控制台执行 1 次?
4

1 回答 1

1
  1. 第一次导入模块时,会在sys.modules. sys.modules是一个字典,将模块名称映射到模块代码。同一模块的所有后续导入都在 中找到模块的名称,并简单地从字典中sys.modules检索模块的代码。sys.modules所以模块中的代码只执行一次,第一次被导入。cf这就是为什么从内部导入不会导致错误的原因cf
  2. 您没有准确解释您对 IDLE 做了什么。我的猜测:您cf.py在 IDLE 窗口中打开,并在该窗口中执行了“运行模块”(F5)。美好的。然后 IDLE 运行文件中的代码。这与导入 cf不同:它直接运行代码cf。运行该代码的一部分是导入cf,它会打印cf.a. 运行该代码的另一部分是 - 再次!- 印刷cf.a。这就是你看到它两次的原因。

顺便说一句,我不知道您所说的“在控制台中 1 次”是什么意思。但是,再一次,你没有准确地解释你做了什么。当我cf.py从控制台运行时,我看到1了两次,出于同样的原因,我刚刚解释了:

$ python cf.py
1
1
于 2013-10-04T21:25:12.230 回答