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_NCSRFC_4122RESERVED_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'

Python——uuid的更多相关文章

  1. python uuid、hex study

    由 import uuid product[“SourceInfo"]["ProductID"] = uuid.uuid4().hex 引起的uuid 一.概述 uuid ...

  2. python uuid 介绍

    1. 背景知识: UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, ...

  3. python UUID

    UUID介绍 UUID是128位的全局唯一标识符,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID ―― Universally Unique IDentif ...

  4. Python uuid库中 几个uuid的区别

    在用到uuid库的时候,发现uuid有很多个,比较好奇,就查了一下他们的区别 uuid1()——基于时间戳 uuid2()——基于分布式计算环境DCE(Python中没有这个函数) uuid3()—— ...

  5. python中uuid来生成机器唯一标识

    摘要: 我们可以使用uuid1的后16位来标识一个机器.  # use machine specific uuid, last 16 char will be the same if machine ...

  6. 11 Python Libraries You Might Not Know

    11 Python Libraries You Might Not Know by Greg | January 20, 2015 There are tons of Python packages ...

  7. Django Model field reference

    ===================== Model field reference ===================== .. module:: django.db.models.field ...

  8. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

  9. 计算机网络(6): http cookie

    Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...

随机推荐

  1. Python Redis pipeline操作和Redis乐观锁保持数据一致性

    Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互. redis 乐观锁:也可理解为版本号比较机制,主要是说在读取数据逇时候同时读取其版本 ...

  2. vue2.0如何自定义全局变量的方法

    方法一:http://www.jianshu.com/p/04dffe7a6b74 //在mian.js中写入函数 Vue.prototype.changeData = function (){ al ...

  3. layui的table中使用switch

    {{# if(false){ }} <input type="checkbox" name="switch" lay-skin="switch& ...

  4. mysql load本地文件失败,提示access denied

    mysql load本地文件失败,提示access denied 解决方式 直接谷歌到stackoverflow,解决方式如下 mysql -u myuser -p --local-infile so ...

  5. Ubuntu 安装 mysql

    sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysqlclient-dev

  6. mysql处理varchar类型的between和and的时间问题少一天解决;

    select * from table where CJSJ day),"%Y-%m-%d") 数据库中的时间类型是varchar,传入的类型也是string 上述sql的意思是: ...

  7. python -- numpy 基本数据类型,算术运算,组合,分割 函数

    0 NumPy数组 NumPy数组:NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数据 NumPy数组属性: ndim(纬数,x,y 2),sha ...

  8. [转]ORA-01555错误总结(二)

    原文地址:http://blog.csdn.net/oradh/article/details/25683769 这篇文章紧接着上一篇“ORA-01555错误总结(一)”,主要描述延迟块清除导致的OR ...

  9. [转]Oracle的update语句优化研究

    原文地址:http://blog.csdn.net/u011721927/article/details/39228001 一.         update语句的语法与原理 1.     语法 单表 ...

  10. Eval与DataBinder.Eval的区别

    DataBinder.Eval的基本格式 DataBinder.Eval(Container.DataItem,"XXX","{0}") <%# Data ...