导入模块中的模块

时间:2013-10-04 21:01:03

标签: python import

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

1 个答案:

答案 0 :(得分:1)

  1. 第一次导入模块时,会在sys.modules中创建一个条目。 sys.modules是一个dict,将模块名称映射到模块代码。同一模块的所有后续导入都在sys.modules中找到模块的名称,只需从sys.modules dict中检索模块的代码即可。因此,模块中的代码仅在第一次导入时执行一次。这就是为什么从cf内导入cf不会导致错误。
  2. 您没有解释完全您使用IDLE做了什么。我的猜测:你在IDLE窗口中打开了cf.py,并在该窗口中执行了“运行模块”(F5)。精细。然后IDLE在文件中运行代码。这与导入 cf不同:它直接在cf中运行代码。运行该代码的一部分是导入cf,它会打印cf.a。运行该代码的另一部分是 - 再次! - 打印cf.a。这就是你看到它两次的原因。
  3. 顺便说一下,我不知道你的意思是“在控制台中1次”。但是,你再次没有解释你到底做了什么。当我从控制台运行cf.py时,我看到1两次,出于同样的原因,我刚刚解释过:

    $ python cf.py
    1
    1