from语句是import的一种扩展,可以直接引入模块中的变量
模块只在第一次import或from的时候才会载入执行,并且只会执行以此,主要是由于该操作开销比较大。
之后的操作都只会取出已加载的模块对象,
import是指将整个模块对象赋值给变量名
from将一个或多个变量名赋值给另一个模块中的同名对象
import是如何工作的?
程序在第一次import时候,会进行以下三个操作:
找到模块文件
编译成位码
执行模块的代码来创建其所定义的对象
在此之后,python将载入的模块存储到sys.modue的表中,并在一次导入操作之后开始检查该表,如果不存在模块,将执行上述三个步骤
先说编译,在编译中,python会检查文件的时间戳。如果发现字节码比源代码旧,就会重新编译成pyc文件
最后一步,创建对象,python会执行上一步生成的pyc文件,文件中的所有语句会依次执行,从头到尾,而此步骤中任何对变量名的赋值操作,都会产生得到模块文件中的属性,当一个模块被import时候,该模块的print将被执行,而其def只是被简单的声明。
那么python会在哪儿找到搜素模块呢?
1、程序的主目录
2、Pythonpath目录
3、标准链接库目录
4、任何.pth文件的内容
最后,这四个组件组成就变成了sys.path ,
主目录:python首先会在主目录中查找搜索导入的文件,然后python会从左到右在pythonpath中查找。接着是标准库目录,最后是.pth目录
关于import与from
i而如果
from引入的变量名和此模块一样,会被覆盖