day15
模块的四种形式
自定义模块
第三方模块
内置模块
包
import和from...import...
import
mport导入 , 引用的时候要加前缀
-
import首次导入模块发生了3件事:
-
以模块为准创造一个模块的名称空间
-
执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间
-
在当前执行文件中拿到一个模块名
from...import
from...import导入, 不需要使用前缀
from...import...首次导入模块发生了3件事:
- 以模块为准创造一个模块的名称空间
- 执行模块对应的文件,将执行过程中产生的名字都丢到模块的名称空间
- 在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,意味着可以不用加任何前缀而直接使用
- 优点:不用加前缀,代码更加精简
- 缺点:容易与当前执行文件中名称空间中的名字冲突
-
循环导入问题
m1.py
from m2 import y
x = 10
m2.py
from m1 import x
y = 20
-
执行m1.py
-
m1.py运行到
from m2 import y
,要运行m2.py -
m2.py运行到
from m1 import x
,要运行m1.py -
进入死循环
m1.py def f1(): from m2 import y x = 10 # m2.py def f1(): from m1 import x y = 20
模块的搜索路径
- 先从内存中已经导入的模块中寻找
- 内置的模块
- 环境变量sys.path中找
python文件的两种用途
__name__ == '__main__'不成立, __name__ != '__main__'# 当testt为模块文件时,__name__等于文件名
__name__是每个文件独有的,当该文件作为执行文件运行时,__name__等于'main';当该文件作为模块文件导入时,__name__等于文件名
pyinstaller模块
pyinstaller库 可以将.py文件转化 为.EXE执行文件
# pyinstaller –i rose.ico(图片文件,百度转一个) –F rose.py(python文件)
pyinstaller –i rose.ico –F rose.py