uuid模塊在Python 2.5以后引入,接口包括:不可變對象UUID(UUID類)和函數uuid1()、uuid3()、uuid4()和uuid5(),后面的四個函數用於生成 RFC 4122 規范中指定的第1、3、4、5版UUID。使用uuid1()或uuid4()可以獲得一個唯一的ID,uuid1()包含了主機的網絡名稱,uuid4()不涉及網絡主機名,僅生成一個隨機UUID,因此從隱私保護角度uuid4()更加安全。
class uuid.UUID([hex[, bytes[, bytes_le[, fields[, int[, version]]]]]])
該類用於從參數給定的內容中實例化UUID對象(hex, bytes, bytes_le, fields, int 必須且只能指定一個):
hex:指定32個字符以創建UUID對象,當指定一個32個字符構成的字符串來創建一個UUID對象時,花括號、連字符和URN前綴等都是可選的;
bytes:指定一個大端字節序的總長16字節的字節串來創建UUID對象;
bytes_le:指定一個小端字節序的總長16字節的字節串來創建UUID對象;
fields:指定6個整數域,共計128位來創建UUID(其中,32位作為time_low段,16位作為time_mid段,16位作為time_hi_version段,8位作為clock_seq_hi_variant段,8位作為clock_seq_low段,48位作為node段);
int:直接指定一個長度為128個二進制位的整數用於創建UUID對象;
version:(可選)指定UUID的版本,從1到5,一旦指定了該參數,生成的UUID將具有自己的變體(variant)和版本數,具體請參考RFC 4122,
例.
下面的各種方法創建相同的UUID對象,
u = UUID('{12345678-1234-5678-1234-567812345678}') u = UUID(hex = '12345678123456781234567812345678') u = UUID('urn:uuid:12345678-1234-5678-1234-567812345678') u = UUID(bytes='\x12\x34\x56\x78'*4) u = UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' + '\x12\x34\x56\x78\x12\x34\x56\x78') u = UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) u = UUID(int=0x12345678123456781234567812345678)
UUID對象含有以下只讀屬性
UUID.bytes
以16個字節構成的字節串形式表示UUID,包含6個大端字節序的整數域;
>>> u.bytes '\x124Vx\x124Vx\x124Vx\x124Vx'
UUID.bytes_le
以16個字節構成的字節串形式表示UUID,包含6個小端字節序的整數域;
>>> u.bytes_le 'xV4\x124\x12xV\x124Vx\x124Vx'
- UUID.fields
- 以元組形式存放的UUID的6個整數域,該元組中的6個元素分別可以通過6個屬性查看,還額外導出了兩個屬性(下面的每個域的名稱也是UUID對象的一個屬性):
域 | 含義 |
time_low | UUID的初始32位 |
time_mid | 接前一域的16位 |
time_hi_version | 接前一域的16位 |
clock_seq_hi_variant | 接前一域的8位 |
clock_seq_low | 接前一域的8位 |
node | UUID的最后48位 |
time | UUID的總長60位的時間戳 |
clock_seq | 14位的序列號 |
>>> u.fields (305419896L, 4660L, 22136L, 18L, 52L, 95073701484152L)
- UUID.hex
- 以32個字符表示的UUID
>>> u.hex '12345678123456781234567812345678'
- UUID.int
- 以一個長度為128個二進制位的整數表示的UUID;
>>> u.int 24197857161011715162171839636988778104L
- UUID.urn
- 以 RFC 4122 中指定的URN形式表示的UUID;
>>> u.urn 'urn:uuid:12345678-1234-5678-1234-567812345678'
- UUID.variant
-
UUID變體(variant),決定UUID內部的布局,已有的值為 RESERVED_NCS、RFC_4122、RESERVED_MICROSOFT 或 RESERVED_FUTURE;
>>> u.variant 'reserved for NCS compatibility'
- UUID.version
- UUID版本,只有當變體為 RFC_4122 時才有效。
>>> u.version >>>
這里由於u.variant == 'reserved for NCS compatibility',所以此處u.version為空。
- uuid模塊還定義了如下函數
- uuid.getnode()
- 獲取硬件的地址並以48位二進制長度的正整數形式返回,這里所說的硬件地址是指網絡接口的MAC地址,如果一個機器有多個網絡接口,可能返回其中的任一個。如果獲取失敗,將按照RFC 4122的規定將隨機返回的48位二進制整數的第8位設置成1。
>>> uuid.getnode() 152667293855L
- uuid.uuid1([node[, clock_seq]])
- 利用主機ID、序列號和當前時間生成一個UUID,如果參數 node 沒有給定,會調用 getnode() 來獲取硬件地址。如果參數中指定了 clock_seq ,使用參數中給定的時鍾序列作為序列號,否則使用一個隨機的14位長的序列號。
>>> uuid.uuid1() UUID('a89e9d00-a710-11e4-a84a-00238bae089f')
- uuid.uuid3(namespace, name)
- 基於命名空間標識符(實質上是一個UUID)和一個名稱(實質上是一個字符串)的MD5哈希值生成UUID。
- uuid.uuid4()
- 生成一個隨機的UUID
>>> uuid4() UUID('b9f9fb88-49f3-4cea-9885-19e57c3572c6')
- uuid.uuid5(namespace, name)
- 基於命名空間標識符(實質上是一個UUID)和一個名稱(實質上是一個字符串)的SHA-1哈希值生成UUID
- 關於uuid3()和uuid5()中提到的命名空間標識符,uuid模塊定義了如下的備選項
- uuid.NAMESPACE_DNS
- 當指定該命名空間時,參數 name 是一個完全限定的(fully-qualified)域名
- uuid.NAMESPACE_URL
- 當指定該命名空間時,參數 name 是一個URL
- uuid.NAMESPACE_OID
- 當指定該命名空間時,參數 name 是一個ISO OID
- uuid.NAMESPACE_X500
- 當指定該命名空間時,參數 name 是一個DER格式或文本格式的X.500 DN。
- 關於屬性variant,uuid模塊定義了如下的常量
- uuid.RESERVED_NCS
- 該常量為兼容NCS而保留;
- uuid.RFC_4122
- 按照 RFC 4122 的規定來確定UUID的布局;
- uuid.RESERVED_MICROSOFT
- 該常量位兼容微軟而保留
- uuid.RESERVED_FUTURE
- 該常量為未來可能的定義保留
- 可以在Python中查看這些常量:
>>> uuid.RESERVED_NCS 'reserved for NCS compatibility' >>> uuid.RFC_4122 'specified in RFC 4122' >>> uuid.RESERVED_MICROSOFT 'reserved for Microsoft compatibility' >>> uuid.RESERVED_FUTURE 'reserved for future definition'