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写入xml文件的方法
May 08 Python
python+opencv轮廓检测代码解析
Jan 05 Python
python定向爬取淘宝商品价格
Feb 27 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python 实现UTC时间加减的方法
Dec 31 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
python爬虫如何解决图片验证码
Feb 14 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 Python
python中redis包操作数据库的教程
Apr 19 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
降低PHP Redis内存占用
2017/03/23 PHP
动态加载iframe
2006/06/16 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
react 生命周期实例分析
2020/05/18 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python编程之多态用法实例详解
2015/05/19 Python
判断网页编码的方法python版
2016/08/12 Python
Python工程师面试必备25条知识点
2018/01/17 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python 写一个性能测试工具(一)
2020/10/24 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
大学毕业感言
2014/01/10 职场文书
优秀护士获奖感言
2014/02/20 职场文书
电视购物广告词
2014/03/19 职场文书
大型演出策划方案
2014/05/28 职场文书
2014年采购工作总结
2014/11/20 职场文书