python中的模块
Posted 闹闹不闹!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的模块相关的知识,希望对你有一定的参考价值。
简介:在编写程序时,经常会引入别人写好的模块。有的模块是Python自带的(内置模块),你无需安装就能直接引用,而有的模块则是由Python生态系统里的第三方工程师提供的,你需要通过
pip
安装之后,才能进行使用。由于在编写Python程序的时候会经常引用别人编写好的模块,因此你应该花一些时间来了解与之有关的知识点。为了让你对Python中的模块有一个清晰的认识,这篇文章将从以下几步来展开:
文章目录
1️⃣ 如何导包
在使用模块前,要先导入模块。
方式一:
import ...
方式二:
from ... import ...
2️⃣ 模块分类
🔰内置模块
python 自带的模块
✒️os模块与os.path模块
os — 多种操作系统接口
os.path — 常用路径操作
模块 | 作用 |
---|---|
os.remove()或os.unlink() | 删除文件 |
os.rename() | 重命名文件 |
os.listdir() | 列出指定目录下所有文件 |
os.chdir() | 改变当前工作目录 |
os.getcwd() | 获取当前文件路径 |
os.mkdir() | 新建目录 |
os.rmdir() | 删除空目录 |
shutil.rmtree() | 删除非空目录, 使用 |
os.makedirs() | 创建多级目录 |
os.removedirs() | 删除多级目录 |
os.stat(file) | 获取文件属性 |
os.chmod(file) | 修改文件权限 |
os.utime(file) | 修改文件时间戳 |
os.name(file) | 获取操作系统标识 |
os.system() | 执行操作系统命令 |
os.execvp() | 启动一个新进程 |
os.fork() | 获取父进程ID,在子进程返回中返回0 |
os.execvp() | 执行外部程序脚本(Uinx) |
os.spawn() | 执行外部程序脚本(Windows) |
os.access(path, mode) | 判断文件权限(详细参考cnblogs) |
os.wait() | 暂时未知 |
os.path.split(filename) | 将文件路径和文件名分割(会将最后一个目录作为文件名而分离) |
os.path.splitext(filename) | 将文件路径和文件扩展名分割成一个元组 |
os.path.dirname(filename) | 返回文件路径的目录部分 |
os.path.basename(filename) | 返回文件路径的文件名部分 |
os.path.join(dirname,basename) | 将文件路径和文件名凑成完整文件路径 |
os.path.abspath(name) | 获得绝对路径 |
os.path.splitunc(path) | 把路径分割为挂载点和文件名 |
os.path.exists() | 判断文件或目录是否存在 |
os.path.isabs() | 如果path是绝对路径,返回True |
os.path.normpath(path) | 规范path字符串形式 |
os.path.realpath(path) | 返回path的真实路径 |
os.path.relpath(path[, start]) | 从start开始计算相对路径 |
os.path.normcase(path) | 转换path的大小写和斜杠 |
os.path.isdir() | 判断name是不是一个目录,name不是目录就返回false |
✒️sys模块
系统相关的参数和函数
模块 | 描述 |
---|---|
sys.argv | 命令行参数List,第一个元素是程序本身路径 |
sys.path | 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 |
sys.modules.keys() | 返回所有已经导入的模块列表 |
sys.modules | 返回系统导入的模块字段,key是模块名,value是模块 |
sys.exit(n) | 退出程序,正常退出时exit(0) |
sys.hexversion | 获取Python解释程序的版本值,16进制格式如:0x020403F0 |
sys.version | 获取Python解释程序的版本信息 |
sys.platform | 返回操作系统平台名称 |
sys.stdout | 标准输出 |
sys.stdout.write(‘aaa‘) | 标准输出内容 |
sys.stdout.writelines() | 无换行输出 |
sys.stdin | 标准输入 |
sys.stdin.read() | 输入一行 |
sys.stderr | 错误输出 |
✒️time模块
time — 时间的访问和转换
模块 | 描述 |
---|---|
time.ctime( ) | 时间的字符串 |
time.time( ) | 返回当前时间的时间戳 |
time.sleep( ) | 延时多少秒 |
✒️math模块
math — 数学函数
模块 | 描述 |
---|---|
ceil | 取大于等于x的最小的整数值,如果x是一个整数,则返回x |
copysign | 把y的正负号加到x前面,可以使用0 |
cos | 求x的余弦,x必须是弧度 |
degrees | 把x从弧度转换成角度 |
e | 表示一个常量 |
exp | 返回math.e,也就是2.71828的x次方 |
expm1 | 返回math.e的x(其值为2.71828)次方的值减1 |
fabs | 返回x的绝对值 |
floor | 取小于等于x的最大的整数值,如果x是一个整数,则返回自身 |
fsum | 对迭代器里的每个元素进行求和操作 |
gcd | 返回x和y的最大公约数 |
✒️random模块
random — 生成伪随机数
模块 | 描述 |
---|---|
random.random() | 函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。 |
random.uniform() | 正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。 |
random.randint() | 随机生一个整数int类型,可以指定这个整数的范围。 |
random.choice() | 可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。 |
random.shuffle()。 | 如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法 。 |
random.sample() | 可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。 |
✒️re模块
匹配正则表达式
模块 | 描述 |
---|---|
re.match(pattern, string, flags=0) | 从字符串的起始位置匹配,如果起始位置匹配不成功的话,match()就返回none |
re.search(pattern, string, flags=0) | 扫描整个字符串并返回第一个成功的匹配 |
re.findall(pattern, string, flags=0) | 找到RE匹配的所有字符串,并把他们作为一个列表返回 |
re.sub(pattern, repl, string, count=0, flags=0) | 替换匹配到的字符串 |
re.finditer(pattern, string, flags=0) | 找到RE匹配的所有字符串,并把他们作为一个迭代器返回 |
🔰第三方模块
第三方模块是别人开发的模块,需要第三方模块可以到官网下载,也可以使用命令行下载
PyPI · The Python Package Index
pip install pygame
pygame是模块名
✒️常见第三方模块
模块 | 作用 |
---|---|
Requests | 请求 |
wxPython | Python的一个GUI(图形用户界面)工具 |
Pillow | 它是PIL(Python图形库)的一个友好分支 |
SQLAlchemy | 数据库的库 |
NumPy | 数学方法 |
Pygame | 游戏 |
Pyglet | 3D动画和游戏开发引擎 |
pywifi | 连接wifi |
pytest | 测试 |
psutil | 运维 |
opencv-python | 计算机视觉 |
🔰自定义模块
如果内置模块和第三方模块都不能实现效果,可以根据需求自定义模块
例:
def addnum(num1,num2)
print(num1 + num2)
文件名number.py
import number
number.addnum(1,2) #结果为1+2=3
那些Python中的模块
参考技术APython的解释环境是很好用,但是如果我们需要编写一个大型的程序的时候,解释环境就完全不够用了。这个时候我们需要将python程序保存在一个文件里。通常这个文件是以.py结尾的。
对于大型的应用程序来说,一个文件可能是不够的,这个时候我们需要在文件中引用其他的文件,这样文件就叫做模块。
模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在模块内部,模块名可以通过全局变量 __name__ 获得。
还是之前的斐波拉赫数列的例子,我们在fibo.py文件中存放了函数的实现:
编写完毕之后,我们可以在Python的解释环境中导入它:
然后直接使用即可:
常用的函数,我们可以将其赋值给一个变量:
或者,我们在导入的时候,直接给这个模块起个名字:
或者导入模块中的函数:
每个模块都有它自己的私有符号表,该表用作模块中定义的所有函数的全局符号表。因此,模块的作者可以在模块内使用全局变量,而不必担心与用户的全局变量发生意外冲突。
前面我们提到了可以使用import来导入一个模块,并且 __name__ 中保存的是模块的名字。
和java中的main方法一样,如果我们想要在模块中进行一些测试工作,有没有类似java中main方法的写法呢?
先看一个例子:
在模块中,我们需要进行一个判断 __name__ 是不是被赋值为 "__main__"。
我们这样来执行这个模块:
以脚本执行的情况下,模块的 __name__ 属性会被赋值为 __main__ , 这也是例子中为什么要这样写的原因。
看下执行效果:
如果是以模块导入的话,那么将不会被执行:
使用import导入模块的时候,解释器首先会去找该名字的内置模块,如果没找到的话,解释器会从 sys.path变量给出的目录列表里寻找。
sys.path的初始目录包括:
要想查看模块中定义的内容,可以使用dir函数。
上面的例子列出了当前模块中定义的内容,包括变量,模块,函数等。
我们可以给dir加上参数,来获取特定模块的内容:
java中有package的概念,用来隔离程序代码。同样的在Python中也有包。
我们看一个Python中包的例子:
上面我们定义了4个包,分别是sound,sound.formats, sound.effects, sound.filters。
__init__.py 可以是一个空文件,也可以执行包的初始化代码或设置 __all__ 变量。
当导入的时候, python就会在 sys.path 路径中搜索该包。
包的导入有很多种方式,我们可以导入单个模块:
但是这样导入之后,使用的时候必须加载全名:
如果不想加载全名,可以这样导入:
那么就可以这样使用了:
还可以直接导入模块中的方法:
然后这样使用:
如果一个包里面的子包比较多,我们可能会希望使用 * 来一次性导入:
那么如何去控制到底会导入effects的哪一个子包呢?
我们可以在 __init__.py 中定义一个名叫 __all__ 的列表,在这个列表中列出将要导出的子包名,如下所示:
这样from sound.effects import * 将导入 sound 包的三个命名子模块。
如果没有定义 __all__,from sound.effects import * 语句 不会 从包 sound.effects 中导入所有子模块到当前命名空间;它只会导入包 sound.effects。
Import 可以指定相对路径,我们使用 . 来表示当前包, 使用 .. 来表示父包。
如下所示:
以上是关于python中的模块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pip 和 PyPI 安装 Python 模块单个文件?
如何使用 pip 和 PyPI 安装 Python 模块单个文件?