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 相关文章推荐
Python实现简单登录验证
Apr 13 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
python操作excel让工作自动化
Aug 09 Python
Python测试线程应用程序过程解析
Dec 31 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
flask 框架操作MySQL数据库简单示例
Feb 02 Python
jenkins+python自动化测试持续集成教程
May 12 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
OpenCV 图像梯度的实现方法
Jul 25 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
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
js常用代码段整理
2011/11/30 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
不使用 JS 匿名函数理由
2017/11/17 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
vue实现公共方法抽离
2020/07/31 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python3判断url链接是否为404的方法
2018/08/10 Python
Python异常处理知识点总结
2019/02/18 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
演讲稿开场白
2014/01/13 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python