四、模块与包&常用模块
一、模块的使用
模块定义:一系列功能的集合体
分为三大类:1.自定义模块
2.内置模块(比如 time,os,sys)
3.第三方模块
模块的表现形式:
1.使用python编写的py文件
2.已被编译为共享库或dll的c或c++扩展
3.把一系列模块组织到一起的文件夹(ps:文件夹下有一个__init__.py文件,该文件夹称为包)
4.使用c编写并链接到python解释器的内置模块
为什么要用模块:
1.可以拿来内置、第三方的模块,然后直接使用,这种拿来就用的方式,会极大的提升开发效率
2.将程序*用的一些功能组织到一个文件中,然后程序各部分组件可以重用该文件中的功能。
优点是 减少代码冗余,增强程序的组织结构性与可维护性
怎么用模块:
一个py文件就是一个模块,如果文件名为modules.py,模块名则为modules
ps:模块的使用必须搞清楚谁是执行文件,谁是被导入的模块
1、模块的使用之import
执行文件:run.py 被导入模块是:modules.py
首次导入模块会发生三件事:
1、创建一个模块modules.py的名称空间
2、执行模块对应的文件modules.py,将产生的名字丢到模块的名称空间中
3、在当前执行文件的名称空间中拿到一个名字modules,该名字就是指向模块modules.py的名称空间的
import modules# modules=modules.py名称空间的内存地址
ps:
在当前执行文件中引用模块中的名字语法为:modules.名字,必须加上modules.作为前缀
modules.名字相当于指名道姓地跟某一个名称空间要名字,根本不会与当前执行文件的名字冲突
2、模块的使用之 from import
执行文件:run.py 被导入模块: spam.py
首次导入模块会发生三件事
1、创建一个模块spam.py的名称空间
2、执行模块对应的文件spam.py,将产生的名字丢到模块的名称空间中
3、在当前执行文件的名称空间中拿到一个名字money,该名字就是指向模块spam.py的名称空间的那个money
from spam import money,read1,read2,change
两种导入方式的对比
相同点:函数的作用域关系在定义阶段就规定死了,与调用位置无关
from import
优点:可以不用加前缀而直接引用名字,更简洁
缺点:容易与当前执行文件中的名字冲突
import
优点:指名道姓跟某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突
缺点:必须加上前缀
3、循环导入的问题
### run.py # 1、创建m1.py的名称空间 # 2、执行m1.py的代码,将产生的名字丢到m1.py的名称空间中 # 3、在当前执行文件的名称空间中拿到一个名字m1 import m1 m1.f1()
4、模块的搜索路径
模块搜索路径优先级:
内存 --------> 内置的模块 --------> sys.path(环境变量)
5、区分python文件的两种用途
一个python文件有两种用途:
1、可以执行运行:__name__ == '__main__'
2、可以被当做模块导入:__name__ == '模块名'
if __name__ == '__main__':