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实现超市扫码仪计费
May 30 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
详解Python中的type和object
Aug 15 Python
python机器学习之神经网络实现
Oct 13 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
python挖矿算力测试程序详解
Jul 03 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python SQLAlchemy库的使用方法
Oct 13 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 Web表单生成器案例分析
2020/06/02 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
基于jquery的表格排序
2010/09/11 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
积极分子思想汇报
2014/01/04 职场文书
家长给孩子的评语
2014/01/30 职场文书
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
Java设计模式之代理模式
2022/04/22 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android