Python 标准库之 uuid
1. uuid 介紹
UUID: 通用唯一標(biāo)識(shí)符 ( Universally Unique Identifier ),對(duì)于所有的 UUID 它可以保證在空間和時(shí)間上的唯一性。它是通過(guò) MAC 地址、時(shí)間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來(lái)保證生成 ID 的唯一性,有著固定的大小 (128 bit )。它的唯一性和一致性特點(diǎn)使得可以無(wú)需注冊(cè)過(guò)程就能夠產(chǎn)生一個(gè)新的 UUID。
UUID 可以被用作多種用途,既可以用來(lái)短時(shí)間內(nèi)標(biāo)記一個(gè)對(duì)象,也可以可靠的辨別網(wǎng)絡(luò)中的持久性對(duì)象。
2. uuid中各個(gè)方法介紹
Python 的 uuid 模塊提供 UUID 和函數(shù) uuid1()、uuid3()、uuid4()、uuid5() 來(lái)生成 1、3、4、5 各個(gè)版本的 UUID ( 需要注意的是:Python中沒(méi)有 uuid2() 這個(gè)函數(shù))。
對(duì)uuid模塊中最常用的幾個(gè)函數(shù)總結(jié)如下:
- uuid.uuid1([node[, clock_seq]]):基于時(shí)間戳
使用主機(jī)ID, 序列號(hào), 和當(dāng)前時(shí)間來(lái)生成UUID,可保證全球范圍的唯一性。但由于使用該方法生成的UUID中包含有主機(jī)的網(wǎng)絡(luò)地址,因此可能危及隱私。該函數(shù)有兩個(gè)參數(shù),如果 node 參數(shù)未指定,系統(tǒng)將會(huì)自動(dòng)調(diào)用 getnode() 函數(shù)來(lái)獲取主機(jī)的硬件地址。如果 clock_seq 參數(shù)未指定系統(tǒng)會(huì)使用一個(gè)隨機(jī)產(chǎn)生的14位序列號(hào)來(lái)代替。
注意 uuid1() 返回的不是普通的字符串,而是一個(gè) uuid 對(duì)象,其內(nèi)含有豐富的成員函數(shù)和變量。
- uuid.uuid3(namespace, name):基于名字的MD5散列值
通過(guò)計(jì)算命名空間和名字的MD5散列值來(lái)生成UUID,可以保證同一命名空間中不同名字的唯一性和不同命名空間的唯一性,但同一命名空間的同一名字生成的UUID相同。
-
uuid.uuid4():基于隨機(jī)數(shù)
通過(guò)隨機(jī)數(shù)來(lái)生成UUID,使用的是偽隨機(jī)數(shù)有一定的重復(fù)概率。
-
uuid.uuid5(namespace, name):基于名字的SHA-1散列值
通過(guò)計(jì)算命名空間和名字的SHA-1散列值來(lái)生成UUID,算法與 uuid.uuid3() 相同。
3. uuid模塊的使用
使用規(guī)則:
首先,Python中沒(méi)有基于 DCE 的,所以u(píng)uid2可以忽略;
其次,uuid4存在概率性重復(fù),由無(wú)映射性,最好不用;
再次,若在Global的分布式計(jì)算環(huán)境下,最好用uuid1;
最后,若有名字的唯一性要求,最好用uuid3或uuid5;
import uuiduuid.uuid1()
Out[2]: UUID('d4428ad1-4aef-11e8-bbd1-346895487cb6')uuid.uuid3(uuid.NAMESPACE_DNS, 'test')
Out[3]: UUID('45a113ac-c7f2-30b0-90a5-a399ab912716')uuid.uuid4()
Out[4]: UUID('b8f688a8-13c1-4f50-8c66-a305c0fc6215')uuid.uuid5(uuid.NAMESPACE_DNS, 'test')
Out[5]: UUID('4be0643f-1d98-573b-97cd-ca98a65347dd')
總結(jié)
以上是生活随笔為你收集整理的Python 标准库之 uuid的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 标准库之 fcntl
- 下一篇: Python 标准库之 Queue