uuidUUID objects according to RFC 4122符合RFC 4122的UUID对象

Source code: Lib/uuid.py


This module provides immutable UUID objects (the UUID class) and the functions uuid1(), uuid3(), uuid4(), uuid5() for generating version 1, 3, 4, and 5 UUIDs as specified in RFC 4122.该模块提供了不可变的UUID对象(UUID类)和函数uuid1()uuid3()uuid4()uuid4(),用于生成RFC 4122中指定的版本1、3、4和5 UUID。

If all you want is a unique ID, you should probably call uuid1() or uuid4(). 如果您只需要一个唯一的ID,那么您可能应该调用uuid1()uuid4()Note that uuid1() may compromise privacy since it creates a UUID containing the computer’s network address. 请注意,uuid1()可能会损害隐私,因为它会创建一个包含计算机网络地址的UUID。uuid4() creates a random UUID.uuid4()创建一个随机UUID。

Depending on support from the underlying platform, uuid1() may or may not return a “safe” UUID. 根据底层平台的支持,uuid1()可能返回也可能不返回“安全”UUID。A safe UUID is one which is generated using synchronization methods that ensure no two processes can obtain the same UUID. 安全UUID是使用同步方法生成的,确保没有两个进程可以获得相同的UUID。All instances of UUID have an is_safe attribute which relays any information about the UUID’s safety, using this enumeration:所有UUID实例都有一个is_safe属性,该属性使用此枚举传递有关UUID安全性的任何信息:

classuuid.SafeUUID

New in version 3.7.版本3.7中新增。

safe

The UUID was generated by the platform in a multiprocessing-safe way.UUID是由平台以多处理安全的方式生成的。

unsafe

The UUID was not generated in a multiprocessing-safe way.UUID不是以多处理安全的方式生成的。

unknown

The platform does not provide information on whether the UUID was generated safely or not.平台不提供有关UUID是否安全生成的信息。

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

Create a UUID from either a string of 32 hexadecimal digits, a string of 16 bytes in big-endian order as the bytes argument, a string of 16 bytes in little-endian order as the bytes_le argument, a tuple of six integers (32-bit time_low, 16-bit time_mid, 16-bit time_hi_version, 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) as the fields argument, or a single 128-bit integer as the int argument. 从32个十六进制数字的字符串、以大端顺序的16个字节的字符串作为bytes参数、以小端顺序的十六个字节的串作为bytes_le参数、以六个整数(32位time_low、16位time_mid、16位time_hi_version、8位clock_seq_hi_variant、8位clock_seq_low和48位node)作为字段参数创建UUID,或单个128位整数作为int参数。When a string of hex digits is given, curly braces, hyphens, and a URN prefix are all optional. 当给定十六进制数字字符串时,大括号、连字符和URN前缀都是可选的。For example, these expressions all yield the same UUID:例如,这些表达式都产生相同的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)

Exactly one of hex, bytes, bytes_le, fields, or int must be given. 必须给出hexbytesbytes_lefieldsint中的一个。The version argument is optional; if given, the resulting UUID will have its variant and version number set according to RFC 4122, overriding bits in the given hex, bytes, bytes_le, fields, or int.version参数是可选的;如果给定,生成的UUID将根据RFC 4122设置其变体和版本号,覆盖给定hexbytesbytes_lefieldsint中的位。

Comparison of UUID objects are made by way of comparing their UUID.int attributes. UUID对象的比较是通过比较它们的UUID.int属性进行的。Comparison with a non-UUID object raises a TypeError.与非UUID对象进行比较会引发TypeError

str(uuid) returns a string in the form 12345678-1234-5678-1234-567812345678 where the 32 hexadecimal digits represent the UUID.返回格式为12345678-1234-5678-1234-567812345678的字符串,其中32个十六进制数字表示UUID。

UUID instances have these read-only attributes:实例具有以下只读属性:

UUID.bytes

The UUID as a 16-byte string (containing the six integer fields in big-endian byte order).作为16字节字符串的UUID(包含以大端字节顺序排列的六个整数字段)。

UUID.bytes_le

The UUID as a 16-byte string (with time_low, time_mid, and time_hi_version in little-endian byte order).UUID为16字节字符串(time_lowtime_midtime_hi_version按低位字节顺序排列)。

UUID.fields

A tuple of the six integer fields of the UUID, which are also available as six individual attributes and two derived attributes:UUID的六个整数字段组成的元组,也可以作为六个单独属性和两个派生属性使用:

Field字段

Meaning含义

time_low

the first 32 bits of the UUIDUUID的前32位

time_mid

the next 16 bits of the UUIDUUID的下16位

time_hi_version

the next 16 bits of the UUIDUUID的下16位

clock_seq_hi_variant

the next 8 bits of the UUIDUUID的下8位

clock_seq_low

the next 8 bits of the UUIDUUID的下8位

node

the last 48 bits of the UUIDUUID的最后48位

time

the 60-bit timestamp60位时间戳

clock_seq

the 14-bit sequence number14位序列号

UUID.hex

The UUID as a 32-character lowercase hexadecimal string.UUID为32个字符的小写十六进制字符串。

UUID.int

The UUID as a 128-bit integer.UUID为128位整数。

UUID.urn

The UUID as a URN as specified in RFC 4122.RFC 4122中指定的UUID作为URN。

UUID.variant

The UUID variant, which determines the internal layout of the UUID. UUID变体,用于确定UUID的内部布局。This will be one of the constants RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, or RESERVED_FUTURE.这将是常量RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURE之一。

UUID.version

The UUID version number (1 through 5, meaningful only when the variant is RFC_4122).UUID版本号(1到5,仅当变量为RFC_4122时才有意义)。

UUID.is_safe

An enumeration of SafeUUID which indicates whether the platform generated the UUID in a multiprocessing-safe way.SafeUUID的枚举,指示平台是否以多处理安全的方式生成UUID。

New in version 3.7.版本3.7中新增。

The uuid module defines the following functions:uuid模块定义以下函数:

uuid.getnode()

Get the hardware address as a 48-bit positive integer. 以48位正整数的形式获取硬件地址。The first time this runs, it may launch a separate program, which could be quite slow. 第一次运行时,它可能会启动一个单独的程序,这可能会很慢。If all attempts to obtain the hardware address fail, we choose a random 48-bit number with the multicast bit (least significant bit of the first octet) set to 1 as recommended in RFC 4122. 如果所有获取硬件地址的尝试都失败,我们选择一个随机的48位数字,并按照RFC 4122中的建议将多播位(第一个八位字节的最低有效位)设置为1。“Hardware address” means the MAC address of a network interface. “硬件地址”指网络接口的MAC地址。On a machine with multiple network interfaces, universally administered MAC addresses (i.e. where the second least significant bit of the first octet is unset) will be preferred over locally administered MAC addresses, but with no other ordering guarantees.在具有多个网络接口的机器上,通用管理的MAC地址(即第一个八位字节的第二个最低有效位未设置)将优先于本地管理的MAC,但没有其他排序保证。

Changed in version 3.7:版本3.7中更改: Universally administered MAC addresses are preferred over locally administered MAC addresses, since the former are guaranteed to be globally unique, while the latter are not.通用管理的MAC地址优先于本地管理的MAC,因为前者保证全局唯一,而后者则不然。

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

Generate a UUID from a host ID, sequence number, and the current time. 从主机ID、序列号和当前时间生成UUID。If node is not given, getnode() is used to obtain the hardware address. 如果未给定节点,则使用getnode()获取硬件地址。If clock_seq is given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.如果给定clock_seq,则用作序列号;否则,选择随机14位序列号。

uuid.uuid3(namespace, name)

Generate a UUID based on the MD5 hash of a namespace identifier (which is a UUID) and a name (which is a string).根据命名空间标识符(UUID)和名称(字符串)的MD5哈希生成UUID。

uuid.uuid4()

Generate a random UUID.生成随机UUID。

uuid.uuid5(namespace, name)

Generate a UUID based on the SHA-1 hash of a namespace identifier (which is a UUID) and a name (which is a string).根据命名空间标识符(UUID)的SHA-1哈希和名称(字符串)生成UUID。

The uuid module defines the following namespace identifiers for use with uuid3() or uuid5().uuid模块定义了以下名称空间标识符,用于uuid3()uuid5()

uuid.NAMESPACE_DNS

When this namespace is specified, the name string is a fully-qualified domain name.指定此命名空间时,name字符串是完全限定的域名。

uuid.NAMESPACE_URL

When this namespace is specified, the name string is a URL.指定此名称空间时,name字符串是URL。

uuid.NAMESPACE_OID

When this namespace is specified, the name string is an ISO OID.指定此名称空间时,name字符串为ISO OID。

uuid.NAMESPACE_X500

When this namespace is specified, the name string is an X.500 DN in DER or a text output format.指定此名称空间时,name字符串是DER格式的X.500 DN或文本输出格式。

The uuid module defines the following constants for the possible values of the variant attribute:uuid模块为variant属性的可能值定义以下常量:

uuid.RESERVED_NCS

Reserved for NCS compatibility.保留NCS兼容性。

uuid.RFC_4122

Specifies the UUID layout given in RFC 4122.指定variant中给出的UUID布局。

uuid.RESERVED_MICROSOFT

Reserved for Microsoft compatibility.为与Microsoft兼容而保留。

uuid.RESERVED_FUTURE

Reserved for future definition.保留以供将来定义。

See also

RFC 4122 - A Universally Unique IDentifier (UUID) URN Namespace通用唯一标识符(UUID)URN命名空间

This specification defines a Uniform Resource Name namespace for UUIDs, the internal format of UUIDs, and methods of generating UUIDs.该规范定义了UUID的一致性资源名称名称空间、UUID内部格式和生成UUID方法。

Example示例

Here are some examples of typical usage of the uuid module:以下是uuid模块的一些典型用法示例:

>>> import uuid
>>> # 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
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')