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.

UUID.clock_seq

14 位元的序列號。只與版本 1 和 6 有關。

UUID.hex

UUID 以 32 個小寫十六進位字元組成的字串表示。

UUID.int

UUID 以 128 位元的整數表示。

UUID.urn

UUID 以 RFC 9562 中指定的 URN 形式表示。

UUID.variant

UUID 的變體,決定 UUID 內部的佈局 (layout),是 RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURE 其中一個常數。

UUID.version

UUID 的版本號(1 到 8,只有當變體是 RFC_4122 時才有意義)。

在 3.14 版的變更: 新增了 UUID 版本 6、7 和 8。

UUID.is_safe

SafeUUID 的列舉,表示平台是否以多行程安全的方式產生 UUID。

在 3.7 版被加入.

uuid 模組定義了以下函式:

uuid.getnode()

取得 48 位元正整數形式的硬體位址。第一次執行時,有可能會啟動一個獨立的程式,這也許會相當耗時。如果所有取得硬體位址的嘗試都失敗,我們會根據 RFC 4122 中的建議,使用一個 48 位元的隨機數,其中群播位元 (multicast bit)(第一個八位元組的最低有效位)設置為 1。「硬體位址」指的是網路介面 (network interface) 的 MAC 位址。在具有多個網路介面的機器上,將優先選擇通用管理 (universally administered) 的 MAC 位址(即第一個八位元組的第二個最低有效位是 未設置的),而不是本地管理 (locally administered) 的 MAC 位址,除此之外不保證任何選擇的順序。

在 3.7 版的變更: 通用管理的 MAC 位址優於本地管理的 MAC 位址,因為前者保證是全球唯一的,而後者不是。

uuid.uuid1(node=None, clock_seq=None)

Generate a UUID from a host ID, sequence number, and the current time according to