目录
- 一、什么是模块?
- 1.1 定义
- 1.2 分类
- 1.3 五种模块引入的方法
- 1)import 模块名(全部引入)
- 2)from 模块名 import 功能名(部分引入)
- 3)from 模块名 import *(引入公共功能)【不推荐】
- 4)import 模块名 as 别名(设置模块别名)
- 5)from 模块名 import 功能名 as 别名(设置功能别名)
- 1.4 模块的搜索目录
- 1.5 如何自定义模块
- 二、常见的内置模块
- 2.1 math 模块(数学运算)
- 2.2 random 模块(伪随机数)
- 2.3 os 模块(操作系统文件)
- 2.4 os.path 子模块(操作路径)
- 2.5 sys 模块(Python解释器交互)
- 2.6 uuid 模块(唯一标识符)
- 2.7 时间模块
- 1)time 模块
- 2)datetime 模块
- 3)calendar 模块
- 2.8 加密模块
- 1)hashlib 模块
- 2)hmac 模块
在介绍常用的模块用法前,我们先来回顾一下模块的内容,以及如何使用模块?
一、什么是模块?
1.1 定义
在 Python 中,将实现莫伊特定功能的代码放置在文件中,以便其它程序进行导入使用,这种方式可以避免函数名或变量名的冲突,这种文件称为 模块(Modules)
,格式为 扩展名.py
。
- 模块 = 函数 + 类 + 变量
打开 python 的安装包,可以看到 Lib
文件夹下全是模块。
1.2 分类
在 Python 中,模块分为 内置模块
和 自定义模块
两种。
内置模块
:目前 Python 内置模块大概在 200 多个,如:
模块名 | 描述 |
---|---|
sys | 与 Python 解释器及其环境操作相关的标准库。 |
time | 提供与时间相关的各种函数的标准库。 |
os | 提供了访问操作系统服务功能的标准库。 |
calendar | 提供与日期相关的各种函数的标准库。 |
urllib | 用于读取来自网上(服务器上)的数据的标准库。 |
json | 用于使用 JSON 序列化和反序列化对象。 |
re | 用于在字符串中执行正则表达式匹配和替换。 |
math | 提供算数运算函数的标准库。 |
decimal | 用于进行精确控制运算精度、有效位数和四舍五入操作的十进制运算。 |
shutil | 用于进行高级文件操作,如复制、移动和重命名等。 |
logging | 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能。 |
tkinter | 使用 Python 进行 GUI 编程的标准库。 |
自定义模块
:来自第三方提供的模块。
1.3 五种模块引入的方法
import 模块名
from 模块名 import 功能名
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
(导入多个模块或功能时,用英文逗号分隔)
1)import 模块名(全部引入)
这是最基本的导入方式,它将整个模块导入到当前命名空间中。
-
格式:import 模块名
-
使用方法:模块名.功能名()
-
特点:
- 导入整个模块
- 需要使用模块名作为前缀来访问模块中的功能(如函数、类等)。
- 可以避免命名冲突,因为所有引用都明确指出是哪个模块的功能。
-
使用示例:
import math
print(math.sqrt(9)) # 求平方根
2)from 模块名 import 功能名(部分引入)
这种方式只导入模块中的特定功能(如函数、类等),而不是整个模块。
- 格式:from 模块名 import 功能名
- 使用方法:功能名()
- 特点:
- 只导入指定的功能,减少了内存占用。
- 不需要使用模块名作为前缀,直接调用功能名称即可。
- 如果导入多个功能,可以使用英文逗号分隔。
- 使用示例:
from math import sqrt, pow
print(sqrt(9)) # 求平方根
3)from 模块名 import *(引入公共功能)【不推荐】
这种方式会导入模块中的所有公共功能(即没有以下划线 _
开头的功能)。
- 格式:*from 模块名 import
- 使用方法:功能名()
- 特点:
- 导入模块中的所有公共功能。
- 不需要使用模块名作为前缀,直接调用功能名称即可。
- 使用示例:
from math import *
print(sqrt(16)) # 计算16的平方根
print(pow(2, 3)) # 计算2的3次方
注意: 这种方式可能会导致 命名冲突,因为它会将所有导出的功能引入当前命名空间。因此,通常不推荐在大型项目或生产环境中使用。
4)import 模块名 as 别名(设置模块别名)
这种方式允许为导入的模块指定一个别名,方便在代码中使用更短的名字来引用模块。
- 特点:
- 给模块起一个简短的别名,便于频繁使用时减少输入量。
- 特别适合于长模块名的情况,如
pandas
常用pd
作为别名。 - 仍然需要使用别名作为前缀来访问模块中的功能。
- 使用示例:
import numpy as np
array = np.array([1, 2, 3])
print(array) # 输出:[1, 2, 3]
注意: 设置别名后,不能再使用原有的模块名。
5)from 模块名 import 功能名 as 别名(设置功能别名)
这种方式允许为导入的功能指定一个别名,方便在代码中使用更短的名字来引用该功能。
- 特点:
- 给某个具体的功能起一个别名,便于在代码种使用。
- 不需要使用模块名作为前缀,直接调用别名即可。
- 适用于当功能名较长或容易与其它名称冲突时。
- 使用示例:
from datetime import datetime as dt
print(dt.now()) # 输出当前时间
注意: 设置别名后,不能再使用原有的功能名。
1.4 模块的搜索目录
当使用 import
语句导入模块时,默认情况下会按照如下顺序进行模块查找:
- 执行 python 文件的当前项目目录;
- 环境变量
PYTHONPATH
; - python 解释器安装目录。
当我们不确定有哪些目录的时候,我们可以 sys.path
查看全量的目录。如下所示:
>>> import sys
>>> sys.path
['', 'C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip', 'C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python310\\DLLs', 'C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python310\\lib', 'C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python310', 'C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages']
1.5 如何自定义模块
自定义模块的作用:
将相关的代码编写在一个独立的文件中,并命名为 “模块名.py”,这样就可以导入到程序中使用。
注意:自行创建的模块名不能与 Python 自带的标准库中的模块名重名。
举个例子:
- 创建一个模块文件 prime.py,实现素数判断,代码如下:
def fun_prime(num):
if num < 2:
print('请输入大于2的正整数')
else:
for i in range(2, num):
if num % i == 0:
return 0
else:
return 1
新建一个 python 文件导入上述模块,实现 100 以内的素数判断输出。代码如下:
import prime
for i in range(2, 100):
if prime.fun_prime(i) == 1:
print(i, end=' ')
执行结果如下:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
自定义模块中的功能测试:
- 作用:编写完自定义模块后,最好在模块内部对代码进行测试,以防出现问题。
- 魔法方法:
__name__
,每个模块中都会有一个字符串变量,记录模块名称,随着运行页面的不同,返回值结果也不相同。 - 当前页面执行:返回值为
__main__
。
# 功能函数
def fun_prime(num):
if num < 2:
print('请输入大于2的正整数')
else:
for i in range(2, num):
if num % i == 0:
return 0
else:
return 1
# 测试代码
if __name__ == '__main__':
if fun_prime(5) == 1:
print('程序正常')
else:
print('程序有误')
执行 python prime.py
即可执行 prime.py 中的测试代码部分,执行结果如下:
以上就是模块的全部内容,下面我们来看一下常用的内置模块。
二、常见的内置模块
2.1 math 模块(数学运算)
math
模块的主要作用是 数学运算。
math 模块的常用方法:
方法 | 说明 |
---|---|
ceil() | (天花板的意思) 向上取整 |
floor() | 向下取整 注意:四舍五入(全局函数中的round) |
fabs() | 求绝对值 等价于全局函数abs() |
fmod() | 求模 |
isnan() | 判断是不是一个数字(是数字返回flase nan—not a number) |
isfinite() | 判断是不是无限 |
pow() | 幂次方 |
sqrt() | 根号 开平方根 |
math 模块的常量:
常量 | 描述 |
---|---|
math.e | 返回欧拉数 (2.7182…) |
math.inf | 返回正无穷大浮点数 |
math.nan | 返回一个浮点值 NaN (not a number) |
math.pi | π 一般指圆周率。 圆周率 PI (3.1415…) |
math.tau | 数学常数 τ = 6.283185…,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。 |
2.2 random 模块(伪随机数)
random
模块主要用来产生随机数(伪随机数,以当前时间为种子进行计算得到的,存在并发问题)。
random 模块的常用方法:
方法 | 说明 |
---|---|
randint() | 产生随机整数[m,n] |
random() | 产生一个0~1内的随机数[0,1) random.random() 可以乘10取整得到0·9的整数 |
uniform() | 产生基于正态分布的随机数(一般用不到) |
range() | 产生一个范围的随机数 |
choice() | 在序列(有序的,set是无序的)中随机筛选一个元素 ls=[1,2,3,4,5,6,7,8,9] random.choice(ls) s = {1,2,3,4,5,6,7} random.choice(s)-----报错 |
查看 random
中的全部变量和方法:
>>> import random
>>> print(dir(random))
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_index', '_inst', '_isfinite', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
random 模块中的 random()
方法返回一个随机数,它在半开放区间 [0, 1)
范围内,包含 0 但不包含 1。
>>> import random
>>> print(random.random())
0.537791308607761
random 模块中的 seed()
方法可以改变随机数生成器的种子,可以在调用其它随机模块函数之前调用此函数。示例代码如下:
import random
random.seed() # 默认时,数字相同
print('使用默认种子生成随机数:', random.random())
print('使用默认种子生成随机数:', random.random())
random.seed(10) # 使用相同种子,数字依然相同
print('使用整数 10 种子生成随机数:', random.random())
print('使用整数 10 种子生成随机数:', random.random())
random.seed("hello", 2)
print('使用字符串种子生成随机数:', random.random())
执行结果如下:
常用方法:
randint(a, b)
:返回随机一个整数N,满足 a <= N <= b。random.sample(数组,数组长度)
:返回序列中的随机一个。
2.3 os 模块(操作系统文件)
os
模块操作的是系统的文件系统。例如:
import os
os.system.('cls') # 清屏
print(os.name) # nt:windows操作系统;posix:Linux或Mac操作系统。
os 模块的常用方法:
方法 | 说明 |
---|---|
chdir(path) | 修改当前工作目录 os.chdir(“c:\”)------os.chdir(“…”) ,一般不会更改 |
curdir | 获取当前目录 属性 注意返回的是相对路径 (绝对路径os.path.abspath(os.curdir)) |
chmod() | 修改权限 主要用在linux,help(os.chmod)(不做演示) |
close() | 关闭文件路径(不做演示) |
cpu_count() | 返回cpu的核对应线程数(2核4线程) |
getcwd() | 获取当前路径,返回的是绝对路径 ,相当于linux的pwd |
getpid() | 获取当前进程的进程编号(任务管理器—详细信息) |
getppid() | 获取当前进程的父进程的进程编号 |
kill() | 通过进程编号杀死进程(明白就行) |
linesep | 对应系统下的换行符 |
listdir() | 返回对应目录下的所有文件及文件夹(隐藏文件也可以调取出来),返回的是列表 |
makedirs() | 创建目录,支持创建多层目录(文件夹)os.makedirs(“a/b/c/d”) |
mkdir() | 创建目录,只支持一层创建,不能创建多层 |
open() | 创建文件,等价于全局函数open。 |
pathsep | 获取环境变量的分隔符 windows ; linux : |
sep | 路径的分割符 windows \ linux / |
remove() | 删除文件 os.remove(b.text) |
removedirs() | 移除目录,支持多级删除,递归删除 |
system() | 执行终端命令 |
2.4 os.path 子模块(操作路径)
先引入 os
模块,在 os 模块中有个很重要的模块 path
,要注意 path 是一个子模块,可以通过 help(os.path)
查看帮助文档。
os.path 子模块的常用方法:
方法 | 说明 |
---|---|
abspath() | 返回路径对应的绝对路径(完整的路径) path.abspath(“.”) |
altsep | 查看python中的各种符号 |
basename | 文件名称,shell编程里面也有 path.basename(“路径”) |
dirname | 文件所在的目录,shell编程里面也有 |
exists() | 判断文件或者目录是否存在(特别有用,使用爬虫爬取数据的时候需要判断是否有这个文件或者文件夹) |
getctime() | 创建时间 |
getmtime() | 修改时间 |
getsize() | 获取文件的大小,单位是字节 |
isdir() | 判断path是不是目录(文件夹) |
isfile() | 判断path是不是文件 |
isabs() | 判断是不是绝对路径 |
islink() | 判断是不是连接 |
ismount() | 判断是不是挂载文件(Linux下要用的) |
join(p1, p2) | 拼接路径 name=“123.txt” url=“C:/a/b/c” url +“/”+name path.jion(url,name) |
sep | 路径分隔符 url + path.sep +name |
split() | 分割路径 path.split(“C://desktop”) |
realpath | 返回真实路径 和abspath一样 |
2.5 sys 模块(Python解释器交互)
sys
模块提供了与 Python 解释器及其环境交互的功能。
方法 | 说明 |
---|---|
api_version | 获取当前python的内部版本号 |
argv() | 接收脚本参数的,注意第一个参数是脚本名称(javaz中mian函数中有个args) import sys print(sys.argv) ----- python xxx.py 返回的是[“xxx.py”] python xxx.py 1 2 3 hahaha |
copyright | 输出cpython的版权信息 |
sys.exit() | 退出系统 |
getdefaultencoding() | 获取默认编码, 默认是utf-8(python3),python2的编码是根据系统一致 |
getfilesystemencoding | 获取文件系统的默认编码,默认是utf-8 |
getrecursionlimit | 获取python对于递归的限制层数 |
setrecursionlimit(num) | 重新设置递归的限制层数,注意能不用不要用,以免造成其他的问题 |
getrefcouont(对象) | 获取对象的引用计数,是垃圾回收机制中的引用计数 例如:ls=[1,2,3,4] sys.getrefcouont(ls) ----结果是2 (默认有一个引用计数 加上ls) a = ls sys.getrefcouont(ls) ----结果是3 b=ls 结果是4 |
getwindowsversion() | 返回窗口的版本信息 |
verson | 获取版本信息 |
- 代码示例1:退出程序。
import sys
a=2
if a<=2:
sys.exit(8)
print(a) # 未执行
#注释:退出python执行程序,下面的代码将不会执行,如同shell中的exit一样。
- 代码示例2:获取 Python 版本信息。
import sys
print(sys.version) # 获取版本信息
- 代码示例3:获取输入信息。
import sys
# sys.stdin.readline() 相当于input,区别在于input不会读入'\n'
aa = sys.stdin.readline() # 输入数据多一个'\n'
bb = input('请输入:')
print(len(aa))
print(len(bb))
2.6 uuid 模块(唯一标识符)
uuid
模块用于生成唯一标识符(UUID),通常用于确保标识符在全球范围内的唯一性。
补充:
UUID
: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的UUID它可以保证在空间和时间上的唯一性,它是通过MAC地址、 时间戳、 命名空间、 随机数、 伪随机数来保证生成ID的唯一性,有着固定的大小( 128 bit位 ),通常由 32 字节的字符串(十六进制)表示。
Python 的 uuid
模块提供的 UUID 类和函数 uuid1()
,uuid3()
,uuid4()
,uuid5()
来生成1, 3, 4, 5各个版本的UUID ( 需要注意的是:python中没有uuid2()这个函数)。
import uuid
name = 'test_name'
namespace = uuid.NAMESPACE_DNS
a = uuid.uuid1()
print(a, type(a)) # 基于时间戳
b = uuid.uuid3(namespace, name) # 基于名字的MD5散列值
print(b, type(b))
c = uuid.uuid4() # 基于随机数
print(c, type(c))
d = uuid.uuid5(namespace, name) # 基于名字的SHA-1散列值
print(d, type(d))
执行结果如下:
C:\Users\lenovo\AppData\Local\Programs\Python\Python310\python.exe D:\pythonProject\PythonProject2\main.py
0fd9328b-d0b0-11ef-8b56-1cbfc053d1aa <class 'uuid.UUID'>
7e9fc176-3b19-394a-9530-83391161f8e9 <class 'uuid.UUID'>
f8e6eaeb-c61f-4f28-a1fb-5a04b0c8e7d6 <class 'uuid.UUID'>
ad85ae8c-f638-56e0-b9fc-5d7a58009f62 <class 'uuid.UUID'>
2.7 时间模块
1)time 模块
time
模块主要用于格式化时间,在 Python 爬虫等应用中相当有用。
time 模块的常用方法:
方法 | 说明 |
---|---|
asctime() | 获取当前时间 |
ctime() | 获取当前时间 |
localtime() | 获取本地时间 返回的是对象,方便自己完成格式化 ltiem = time.localtime() ltime.tm_year print(“%s-%s-%s &s:%s:%s”%(ltime.tm_year,ltime.tm_mon,ltime.tm_mday,ltime.tm_hour,ltime.tm_min,ltime.tm_sec)) |
sleep(1) | 表示休眠时间,单位是秒 |
time() | 获取当前系统的时间戳,单位是秒(计算机从1970年0时0分0秒到现在秒数) |
strftime() | 将时间对象格式化为字符串 f—format help(time.strftime) time.strftime(“%Y-%m-%d”) |
strptime() | 将一个特定格式的时间字符串转换成时间对象 help(time.strptime) s=“2019-08-03 07:35:35” type(s) time.strptime(s,“%Y-%m-%d %H:%M:%S”) |
代码示例如下:
import time
t = time.time()
print('当前时间戳为:', t)
localtime = time.localtime()
print('本地时间为:', localtime) # 时间元组,附表查看
localtime = time.asctime(time.localtime())
print('本地时间为:', localtime)
# 格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
print(time.strftime('%a %b %d %H:%M:%S %Y', time.localtime()))
时间元组如下:
执行结果如下:
当前时间戳为: 1736664565.9515433
本地时间为: time.struct_time(tm_year=2025, tm_mon=1, tm_mday=12, tm_hour=14, tm_min=49, tm_sec=25, tm_wday=6, tm_yday=12, tm_isdst=0)
本地时间为: Sun Jan 12 14:49:25 2025
2025-01-12 14:49:25
Sun Jan 12 14:49:25 2025
2)datetime 模块
datetime
模块是 Python 对 time
模块的补充,用于时间的处理。datetime 的子模块如下:
- 常用类:date类、time类、datetime类、timedelta类。
代码示例如下:
import datetime as dt
print(dt.datetime.now()) # 当前时间
print(dt.date(2021, 10, 1)) # 年、月、日
print(dt.time(7, 15, 30, 10)) # 时、分、秒、微妙
print(dt.datetime(2021, 10, 1, 7, 15, 30)) # date类和time类的结合,参数:年、月、日、时、分、秒
print(dt.timedelta(3, 2, 1, 6)) # 日、秒、微妙、毫秒、分钟、小时,周星期
执行结果如下:
2025-01-12 15:02:27.178224
2021-10-01
07:15:30.000010
2021-10-01 07:15:30
3 days, 0:00:02.006001
3)calendar 模块
calendar
模块提供了日历相关的功能,如生成月历、周历等。
代码示例如下:
import calendar
print('calendar.calendar() 返回某年的日历:')
print(calendar.calendar(2022))
print('calendar.month() 返回某年某月的日历:')
print(calendar.month(2022, 11))
print('calendar.isleap() 返回是否是闰年:')
print(calendar.isleap(2020), calendar.isleap(2021))
print('calendar.leapdays() 返回两年之间的闰年总数:')
print(calendar.leapdays(2000, 2021))
print('calendar.weekday() 返回某年某月某日是周几:')
print(calendar.weekday(2022, 11, 23))
执行结果如下:
calendar.calendar() 返回某年的日历:
2022
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
calendar.month() 返回某年某月的日历:
November 2022
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
calendar.isleap() 返回是否是闰年:
True False
calendar.leapdays() 返回两年之间的闰年总数:
6
calendar.weekday() 返回某年某月某日是周几:
2
Process finished with exit code 0
2.8 加密模块
1)hashlib 模块
hashlib
模块提供了多种哈希算法(如 MD5、SHA-1、SHA-256 等)来生成数据的哈希值,常用于密码存储和数据完整性校验。
代码示例如下:
# 使用SHA-256生成哈希值
import hashlib
hash_object = hashlib.sha256(b'Hello, World!')
print(hash_object.hexdigest()) # 输出:SHA-256 哈希值
执行结果如下:
dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
2)hmac 模块
hmac
模块实现了基于哈希的消息认证码(HMAC),用于验证消息的完整性和真实性。
代码示例如下:
import hmac
import hashlib
key = b'secret-key'
message = b'This is a secret message.'
h = hmac.new(key, message, hashlib.sha256)
print(h.hexdigest()) # 输出:HMAC值
执行结果如下:
8ff2696f30b8ed5f0944c12056f9ac826d10dba5b0001e5e63880015b6dccfc2
整理完毕,完结撒花~🌻
参考地址:
1.Python——常见内置模块,https://blog.csdn.net/weixin_63172698/article/details/134625963