Python 在多个位置导入同一模块

Python 在多个位置导入同一模块,python,Python,因此,从效率的角度来看,我很好奇。这是如何工作的: 假设我有以下脚本: #home.py import os def homePrinter(): print os.environ["HOME"] if __name__ == '__main__': homePrinter() #path.py import os print os.environ["PATH"] import home home.homePrinter() 很简单,我导入模块,然后运行homePr

因此,从效率的角度来看,我很好奇。这是如何工作的:

假设我有以下脚本:

#home.py

import os

def homePrinter():
    print os.environ["HOME"]

if __name__ == '__main__':
    homePrinter()
#path.py

import os
print os.environ["PATH"]

import home
home.homePrinter()
很简单,我导入模块,然后运行
homePrinter()
命令,该命令运行
os.environ[“HOME”]

但是,假设我将该脚本保存为
home.py
,并在以下脚本中运行它:

#home.py

import os

def homePrinter():
    print os.environ["HOME"]

if __name__ == '__main__':
    homePrinter()
#path.py

import os
print os.environ["PATH"]

import home
home.homePrinter()

现在,当我运行
path.py
文件时,它导入操作系统,当我导入
home.py
时,它也导入操作系统。python如何处理两次导入的相同模块

Python将每次导入都放在
sys.modules
中,因此下次尝试导入时,只需从
sys.modules
中获取导入的模块,而无需重新读取文件

下面是一个例子:

鸡蛋.py

import sys

print 'Importing spam'
import spam
print

print 'Importing spam again'
import spam
print

print 'Removing spam from sys.modules and importing again'
del sys.modules['spam']
import spam
print 'this is spam'
spam.py

import sys

print 'Importing spam'
import spam
print

print 'Importing spam again'
import spam
print

print 'Removing spam from sys.modules and importing again'
del sys.modules['spam']
import spam
print 'this is spam'
输出:

Importing spam
this is spam

Importing spam again

Removing spam from sys.modules and importing again
this is spam