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中的文件和目录操作实现代码
Mar 13 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
python写入中英文字符串到文件的方法
May 06 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
django_orm查询性能优化方法
Aug 20 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Python程序控制语句用法实例分析
Jan 14 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
python中数字是否为可变类型
Jul 08 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 UTF8 文件的签名问题
2009/10/30 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
python在非root权限下的安装方法
2018/01/23 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
python获取整个网页源码的方法
2020/08/03 Python
彻底解决Python包下载慢问题
2020/11/15 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
软件工程师面试题
2012/06/25 面试题
旅游管理实习自我鉴定
2013/09/29 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
电大本科自我鉴定
2014/02/05 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
运动会开幕式主持词
2015/07/01 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
Minikube搭建Kubernetes集群
2022/03/31 Servers