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请求
wxPythonPython的一个GUI(图形用户界面)工具
Pillow它是PIL(Python图形库)的一个友好分支
SQLAlchemy数据库的库
NumPy数学方法
Pygame游戏
Pyglet3D动画和游戏开发引擎
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中的模块

参考技术A

Python的解释环境是很好用,但是如果我们需要编写一个大型的程序的时候,解释环境就完全不够用了。这个时候我们需要将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 模块单个文件?

利用pip安装模块(以安装pyperclip为例)

如何用pip为Python3安装模块

将使用 pip 安装的站点包/模块从较旧版本的 python 迁移到较新/最新版本的 python

如何用pip为Python3安装模块