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根据路径导入模块的方法
Sep 30 Python
python检测远程服务器tcp端口的方法
Mar 14 Python
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
Python读取网页内容的方法
Jul 30 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python中with及contextlib的用法详解
Jun 08 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
python实现图片识别汽车功能
Nov 30 Python
Python3中列表list合并的四种方法
Apr 19 Python
python移位运算的实现
Jul 15 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
Python打包可执行文件的方法详解
2016/09/19 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
代码实例讲解python3的编码问题
2019/07/08 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
数据库连接池的工作原理
2012/09/26 面试题
光盘行动倡议书
2014/02/02 职场文书
大学生活动策划方案
2014/02/10 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
运动会广播稿200字
2015/08/19 职场文书
高中英语教学反思范文
2016/03/02 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
python和anaconda的区别
2022/05/06 Python