Python通用唯一标识符uuid模块使用案例


Posted in Python onSeptember 10, 2020

1. 背景知识:

UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ). 它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID. UUID可以被用作多种用途, 既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象.

为什么要使用UUID?

很多应用场景需要一个id, 但是又不要求这个id 有具体的意义, 仅仅用来标识一个对象. 常见的例子有数据库表的id 字段. 另一个例子是前端的各种UI库, 因为它们通常需要动态创建各种UI元素, 这些元素需要唯一的id , 这时候就需要使用UUID了.

2. Python的uuid模块

python的uuid模块提供UUID类和函数uuid1(), uuid3(), uuid4(), uuid5() 来生成1, 3, 4, 5各个版本的UUID ( 需要注意的是: python中没有uuid2()这个函数). 对uuid模块中最常用的几个函数总结如下:

1. uuid.uuid1([node[, clock_seq]]) : 基于时间戳

使用主机ID, 序列号, 和当前时间来生成UUID, 可保证全球范围的唯一性. 但由于使用该方法生成的UUID中包含有主机的网络地址, 因此可能危及隐私. 该函数有两个参数, 如果 node 参数未指定, 系统将会自动调用 getnode() 函数来获取主机的硬件地址. 如果 clock_seq 参数未指定系统会使用一个随机产生的14位序列号来代替.

2. uuid.uuid3(namespace, name) : 基于名字的MD5散列值

通过计算命名空间和名字的MD5散列值来生成UUID, 可以保证同一命名空间中不同名字的唯一性和不同命名空间的唯一性, 但同一命名空间的同一名字生成的UUID相同.

4. uuid.uuid4() : 基于随机数

通过随机数来生成UUID. 使用的是伪随机数有一定的重复概率.

5. uuid.uuid5(namespace, name) : 基于名字的SHA-1散列值

通过计算命名空间和名字的SHA-1散列值来生成UUID, 算法与 uuid.uuid3() 相同.

3. uuid模块的典型使用方法:

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
Python语言描述KNN算法与Kd树
Dec 13 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
Python定义一个函数的方法
Jun 15 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
python中的3种定义类方法
Nov 27 Python
Python编写单元测试代码实例
Sep 10 #Python
python super()函数的基本使用
Sep 10 #Python
Python如何实现机器人聊天
Sep 10 #Python
Python 必须了解的5种高级特征
Sep 10 #Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 #Python
利用python 读写csv文件
Sep 10 #Python
如何用Python 加密文件
Sep 10 #Python
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
use jscript List Installed Software
2007/06/11 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Python中的XML库4Suite Server的介绍
2015/04/14 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python小进度条显示代码
2019/03/05 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
企业授权委托书范本
2014/09/22 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
教师节班会开场白
2015/06/01 职场文书
财务年终工作总结大全
2019/06/20 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
python cv2图像质量压缩的算法示例
2021/06/04 Python
分享Python异步爬取知乎热榜
2022/04/12 Python