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 09 Python
python操作redis的方法
Jul 07 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
Python机器学习logistic回归代码解析
Jan 17 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
Python如何使用PIL Image制作GIF图片
May 16 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
js获取form的方法
2015/05/06 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
React diff算法的实现示例
2018/04/20 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python logging类库使用例子
2014/11/22 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
windows下ipython的安装与使用详解
2016/10/20 Python
python如何实现数据的线性拟合
2019/07/19 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
可可西里观后感
2015/06/08 职场文书
创业计划书之便利店
2019/09/05 职场文书
Django实现翻页的示例代码
2021/05/24 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Nginx配置使用详解
2022/07/07 Servers