Python标准库 -- UUID模块(生成唯一标识)
看到這篇博客小伙伴,送大家個(gè)福利:
先接著自己的思路,掌握下邊的UUID內(nèi)容,回過(guò)頭來(lái),再看下這篇python基于“雪花算法”gid生成庫(kù)。
地址:https://www.cnblogs.com/hellojesson/p/12942757.html
UUID是什么:
UUID: 通用唯一標(biāo)識(shí)符 ( Universally Unique Identifier ),對(duì)于所有的UUID它可以保證在空間和時(shí)間上的唯一性,也稱為GUID,全稱為:
UUID —— Universally Unique IDentifier Python中稱為 UUID
GUID —— Globally Unique IDentifier C#中稱為 GUID
它是通過(guò)MAC地址、 時(shí)間戳、 命名空間、 隨機(jī)數(shù)、 偽隨機(jī)數(shù)來(lái)保證生成ID的唯一性,,有著固定的大小( 128 bit位 ),通常由 32 字節(jié)的字符串(十六進(jìn)制)表示。
它的唯一性和一致性特點(diǎn),使得可以無(wú)需注冊(cè)過(guò)程就能夠產(chǎn)生一個(gè)新的UUID;UUID可以被用作多種用途, 既可以用來(lái)短時(shí)間內(nèi)標(biāo)記一個(gè)對(duì)象,也可以可靠的辨別網(wǎng)絡(luò)中的持久性對(duì)象。
UUID有什么用?
很多應(yīng)用場(chǎng)景需要一個(gè)id,但是又不要求這個(gè)id 有具體的意義,僅僅用來(lái)標(biāo)識(shí)一個(gè)對(duì)象。常見(jiàn)的用處有數(shù)據(jù)庫(kù)表的id字段;另一個(gè)例子是前端的各種UI庫(kù),因?yàn)樗鼈兺ǔP枰獎(jiǎng)討B(tài)創(chuàng)建各種UI元素,這些元素需要唯一的id, 這時(shí)候就需要使用UUID了。例如:一個(gè)網(wǎng)站在存儲(chǔ)視頻、圖片等格式的文件時(shí),這些文件的命名方式就可以采用 UUID生成的隨機(jī)標(biāo)識(shí)符,避免重名的出現(xiàn)。
UUID模塊提供的UUID類和函數(shù)
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é)如下:
1. uuid.uuid1([node[, clock_seq]]) -- 基于時(shí)間戳
由 MAC 地址(主機(jī)物理地址)、當(dāng)前時(shí)間戳、隨機(jī)數(shù)生成。可以保證全球范圍內(nèi)的唯一性,
但 MAC 的使用同時(shí)帶來(lái)安全性問(wèn)題,局域網(wǎng)中可以使用 IP 來(lái)代替MAC。該函數(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ù)和變量。
2. uuid.uuid2() -- 基于分布式計(jì)算環(huán)境DCE(Python中沒(méi)有這個(gè)函數(shù))
算法與uuid1相同,不同的是把時(shí)間戳的前 4 位置換為 POSIX 的 UID。
實(shí)際中很少用到該方法。
3. uuid.uuid3(namespace, name) -- 基于名字的MD5散列值
通過(guò)計(jì)算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,
和不同命名空間的唯一性,但同一命名空間的同一名字生成相同的uuid。
4. uuid.uuid4() -- 基于隨機(jī)數(shù)
由偽隨機(jī)數(shù)得到,有一定的重復(fù)概率,該概率可以計(jì)算出來(lái)。
5. uuid.uuid5() -- 基于名字的SHA-1散列值
算法與uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法
上述幾個(gè)函數(shù)的使用方法:
>>> import uuid # 導(dǎo)入U(xiǎn)UID模塊
>>> # 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
'x00x01x02x03x04x05x06x07x08
x0bx0cx0ex0f'
>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')
實(shí)例:
首先,Python中沒(méi)有基于 DCE 的,所以u(píng)uid2可以忽略;
其次,uuid4存在概率性重復(fù),由無(wú)映射性,最好不用;
再次,若在Global的分布式計(jì)算環(huán)境下,最好用uuid1;
最后,若有名字的唯一性要求,最好用uuid3或uuid5。
import uuid name = "test_name" namespace = "test_namespace" print uuid.uuid1() # 帶參的方法參見(jiàn)Python Doc print uuid.uuid3(namespace, name) print uuid.uuid4() print uuid.uuid5(namespace, name)
uuid模塊文檔:https://docs.python.org/2/library/uuid.html
總結(jié)
以上是生活随笔為你收集整理的Python标准库 -- UUID模块(生成唯一标识)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 魔镜物语贝拉女神怎么样 贝拉女神强吗
- 下一篇: 从微盟删库事件看数据备份和项目管理