python在导入模块时,即import时究竟有哪些动作?在python中,导入并非只是把一个文本文件插入到另一个文件。导入其实是运行时的运算,程序第一次导入指定文件时,会执行以下三个步骤:
1、找到模块文件
2、编译成位码(即pyc文件)
3、执行模块的代码来创建其所定义的变量(你没看错,导入时代码是会执行的)
需要明确的事,模块导入只有在第一次导入时才会进行。此后,导入相同模块时,会跳过这三个步骤,而只提取内存中已经加载的模块对象。从技术上,Python把载入的模块储存在一个名为sys.modules的表中,并在第一次导入操作时,检查该表。如果不存在便会启动这三个过程。
1、搜索
搜索分为4个步骤
(1)程序的主目录
通常是包含程序的顶层脚本文件的目录。
通常情况下,使用如下可以获取的主程序目录
import os
os.getcwd()
'C:\\Users\\AppData\\Local\\Programs\\Python\\Python38'
(2)标准库目录
即python的安装目录,sys.path可以获取
(3)任何.pth文件中定义的目录
把文件路径在.pth文件中一行一行的列出。例如:你可以定义一个名为myconfig.pth文件放在Python安装目录的顶层(C:/python30或者其子目录lib/sitepackages中)
注意:以上4个方法是有先后顺序的,假如上述4个目录或文件中定义了一个相同的文件名,内容却不相同,以最先找到的为标准
2、编译
Python会检查文件的时间戳,如果发现字节码文件比源代码文件旧,就会在程序运行中重新生成字节码,反之,跳过该步骤。此外,如果发现仅有字节码没有源代码,则直接加载字节码。
3、运行
最后操作是执行模块的字节码。文件中的所有语句均会执行,从头到尾,此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。