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 图片验证码代码分享
Jul 04 Python
python实现simhash算法实例
Apr 25 Python
Python中字符编码简介、方法及使用建议
Jan 08 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
python日志模块logbook使用方法
Sep 19 Python
python实现QQ邮箱发送邮件
Mar 06 Python
Python celery原理及运行流程解析
Jun 13 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
Anaconda使用IDLE的实现示例
Sep 23 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制作的简单验证码识别代码
2016/01/26 PHP
PHP之header函数详解
2021/03/02 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python中的map、reduce和filter浅析
2014/04/26 Python
python中list常用操作实例详解
2015/06/03 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python文件的读写和异常代码示例
2017/10/31 Python
pycharm 安装JPype的教程
2019/08/08 Python
pandas数据处理之绘图的实现
2020/06/15 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
创意广告词
2014/03/17 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python