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 网络编程起步(Socket发送消息)
Sep 06 Python
python实现SMTP邮件发送功能
Jun 16 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
Tensorflow 查看变量的值方法
Jun 14 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
Python 转换文本编码实现解析
Aug 27 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
python对验证码降噪的实现示例代码
Nov 12 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue实现购物车加减
2020/05/30 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
python导入模块交叉引用的方法
2019/01/19 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
大学校运会广播稿
2014/02/03 职场文书
财务部总监岗位职责
2014/03/12 职场文书
工作所在部门证明
2014/09/21 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
全民创业工作总结
2015/08/13 职场文书
财务年终工作总结大全
2019/06/20 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书