python模块基础
模块
1 什么是模块
模块一系列功能的集合体
模块分为四种通用的类别
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
模块有三种来源:
1 python自带的模块/库
内置模块
标准库
2 第三方的库
3 自定义库
2 为何要用模块
1 拿来主义,提升开发效率
2 减少代码冗余
3 如何用模块
import+模块名 #将函数放在一个文件内, 不会与当前文件夹函数名冲突
from ... import # 使用方便,但容易与当前文件夹函数名冲突
4 import+模块名
1、首次导入模块发生了2件事:
1、会触发spam.py的运行,会产生一个模块的名称空间,用来存放模块运行过程中产生的名字
2、会在当前文件的名称空间中产生一个名字spam,该名字指向模块的名称空间
后续的导入直接引用之前已经产生的名称空间
2、为模块名起别名
为已经导入的模块起别名的方式对编写可扩展的代码很有用
3、在一行导入多个模块
import sys,os,re
5 from+模块名+import+功能函数名
1、首次导入模块发生了2件事:
1、会触发spam.py的运行,会产生一个模块的名称空间,用来存放模块运行过程中产生的名字
2、会在当前文件的名称空间中产生一个名字spam,该名字指向模块的名称空间
后续的导入直接引用之前已经产生的名称空间
2、为模块名器别名
from spam import read1 as read
3、一行导入多个名字
from spam import read1,read2,money
4、from...import *
from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置
大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。
而且可读性极其的差,在交互式环境中导入时没有问题。
6 模块循环导入问题
模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码
在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方
在程序出现了循环/嵌套导入后的异常分析、解决方法如下:
1、导入语句放到最后
2、导入语句放到函数中
3、可以借用其他模块,如在调用模块下再调用import os,将需要用到的变量os.environ['x']=str(x),然后在运行文件里调用os模块和被调用模块,os.environ['x']
7 py文件区分两种用途:模块与脚本
编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行
二:模块,文件中存放着一堆功能,用来被导入使用
python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
8 模块搜索路径
模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
搜索路径:
当一个命名为spam的模块被导入时
解释器首先会从内建模块中寻找该名字
找不到,则去sys.path中找该名字
sys.path从以下位置初始化
1 执行文件所在的当前目录
2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样)
3 依赖安装时默认指定的

浙公网安备 33010602011771号