uuid --- RFC 9562 定義的 UUID 物件

原始碼:Lib/uuid.py


This module provides immutable UUID objects (the UUID class) and functions for generating UUIDs corresponding to a specific UUID version as specified in RFC 9562 (which supersedes RFC 4122), for example, uuid1() for UUID version 1, uuid3() for UUID version 3, and so on. Note that UUID version 2 is deliberately omitted as it is outside the scope of the RFC.

如果你只需要一個唯一的 ID,你應該呼叫 uuid1()uuid4()。需要注意的是,uuid1() 可能會危害隱私,因為它會建立一個包含了電腦網路位址的 UUID。而 uuid4() 則會建立一個隨機的 UUID。

根據底層平台的支援情況,uuid1() 可能會也可能不會回傳一個「安全的」UUID。安全的 UUID 是使用同步方法生成的,以確保不會有兩個行程取得到相同的 UUID。所有 UUID 的實例都有一個 is_safe 屬性,該屬性使用下面這個列舉來傳遞有關 UUID 安全性的任何資訊:

class uuid.SafeUUID

在 3.7 版被加入.

safe

該 UUID 是由平台以多行程安全的 (multiprocessing-safe) 方式生成的。

unsafe

該 UUID 不是以多行程安全的方式生成的。

unknown

該平台不提供 UUID 是否為安全生成的資訊。

class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)

從以下其中一種引數來建立 UUID:由 32 個十六進位的數字組成的字串、以大端順序 (big-endian) 排列的 16 個位元組組成的字串作為 bytes 引數、以小端順序 (little-endian) 排列的 16 個位元組組成的字串作為 bytes_le 引數、由 6 個整數(32 位元的 time_low、16 位元的 time_mid、16 位元的 time_hi_version、8 位元的 clock_seq_hi_variant、8 位元的 clock_seq_low、48 位元的 node)組成的元組 (tuple) 作為 fields 引數,或者是單一的 128 位元整數作為 int 引數。當給定由十六進位的數字組成的字串時,大括號、連字符號和 URN 前綴都是可以選用的。例如,以下這些運算式都會產生相同的 UUID:

UUID('{12345678-1234-5678-1234-567812345678}')
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes=b'\x12\x34\x56\x78'*4)
UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +
              b'\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

必須正好給定其中一個引數 hexbytesbytes_lefieldsintversion 引數是選用的;如果給定了該引數,生成的 UUID 將根據 RFC 9562 設置其變體 (variant) 和版本號,覆蓋掉給定的 hexbytesbytes_lefieldsint 中的位元。

UUID 物件之間的比較是透過比較它們的 UUID.int 屬性。與非 UUID 的物件進行比較會引發 TypeError

str(uuid) 會回傳一個像是 12345678-1234-5678-1234-567812345678 形式的字串,其中 32 個十六進位的數字代表 UUID。

UUID 實例有以下唯讀的屬性:

UUID.bytes

UUID 以 16 位元組的字串表示(包含 6 個整數欄位,按照大端位元組順序排列)。

UUID.bytes_le

UUID 以 16 位元組的字串表示(其中 time_lowtime_midtime_hi_version 按照小端位元組順序排列)。

UUID.fields

UUID 以 6 個整數欄位所組成的元組表示,也可以看作有 6 個個別屬性和 2 個衍生屬性:

欄位

意義

UUID.time_low

UUID 的前 32 位元。只與版本 1 有關。

UUID.time_mid

UUID 接下來的 16 位元。只與版本 1 有關。

UUID.time_hi_version

UUID 接下來的 16 位元。只與版本 1 有關。

UUID.clock_seq_hi_variant

UUID 接下來的 8 位元。只與版本 1 和 6 有關。

UUID.clock_seq_low

UUID 接下來的 8 位元。只與版本 1 和 6 有關。

UUID.node

UUID 最後的 48 位元。只與版本 1 有關。

UUID.time

The 60-bit timestamp as a count of 100-nanosecond intervals since Gregorian epoch (1582-10-15 00:00:00) for versions 1 and 6, or the 48-bit timestamp in milliseconds since Unix epoch (1970-01-01 00:00:00) for version 7.