一、模块简介
-
什么是模块
模块是一系列功能的集合体,也可以看成是一堆函数的集合体。
-
模块的四种形式
-
自定义模块——自己写的py文件,并在文件内写入一堆函数
-
第三方模块——已被编译为共享库或DLL的C或C++扩展,pip install
-
内置模块——使用C编写并链接到python解释器的内置模块
-
包——把一系列模块组织到一起的文件夹
二、import和from…import
-
import首次导入发生的三件事
-
以模块为准创造一个模块名称空间。
-
执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间。
-
在当前执行文件中拿到一个模块名。
-
Form…import…首次导入发生的三件事
-
以模块为准创造一个模块的名称空间
-
执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间。
-
在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,意味着可以不用加任何前缀而直接使用。
-
两种导入模块方式的异同
-
相同点
-
两者都会执行模块对应的文件,两者都会产生模块的名称空间。
-
两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关。
-
不同点
-
import需要加前缀;from…import…不需要加前缀,代码更精简
-
From…import…容易与当前执行文件中名称空间中的名字冲突
三、循环导入问题
-
问题,无论运行下述哪个文件,都会报错。
-
m1文件
from m2 import b a = 'a'
-
m2文件
from m1 import a b = 'b'
-
解决方法一
-
m1文件
def func1(): from m2 import b a = 'a'
-
m2文件
def func2(): from m1 import a b = 'b'
-
解决方法二
-
m1文件
a = 'a' from m2 import b
b = 'b' from m1 import a
四、模块的搜索路径
-
如果模块的文件路径和执行文件不在同一个文件目录下,就会根据某个顺序在计算机中搜索模块。
-
导入模块时查找顺序是:
-
从内存中已经导入的模块中找
-
内置模块
-
环境变量
五、python文件的两种用途
-
脚本,一个文件就是整个程序,用来被执行。
-
模块,文件中存放一堆功能,用来被导入使用。