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抓取网页正文的源码
Jun 11 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
浅谈Python中copy()方法的使用
May 21 Python
vscode 远程调试python的方法
Dec 01 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 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
php print EOF实现方法
2009/05/21 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python_mask_array的用法
2020/02/18 Python
python自动下载图片的方法示例
2020/03/25 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python 调整图片亮度的示例
2020/12/03 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
《唯一的听众》教学反思
2014/02/20 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
工作收入证明范本
2015/06/12 职场文书
采购部年度工作总结
2015/08/13 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python