1. <wbr id="m8vu6"></wbr>

      <del id="m8vu6"><center id="m8vu6"><source id="m8vu6"></source></center></del>
        <p id="m8vu6"><sub id="m8vu6"></sub></p>

        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > Python基礎教程 >
        • python基礎教程之Python3標準庫:uuid 全局唯一標識符

        本站最新發布   Python從入門到精通|Python基礎教程
        試聽地址  
        http://www.squ68.com/eschool/python.html


        1. uuid 全局唯一標識符

        uuid 模塊實現了全局唯一標識符(Universally Unique Identifier);這個RFC定義了一個系統,可以為資源創建唯一的標識符,這里采用一種不需要集中注冊機的方式。UUID值為128位,正如參考指南所述,“UUID可以保證跨空間和時間的唯一性”。對于文檔、主機、應用客戶以及其他需要唯一值的情況,UUID可以用來生成標識符。這個RFC特別強調創建一個統一資源名(Uniform Resource Name)命名空間,并且涵蓋了3個主要算法。

        • 使用IEEE802MAC地址作為唯一性來源
        • 使用偽隨機數
        • 使用公開的串并結合密碼散列

        在上述所有情況下,種子值都要與系統時鐘結合,如果向后設置時鐘,則要用一個時鐘序列值維護唯一性。

        1.1 UUID1: IEEE 802 MAC地址

        UUID1值使用主機的MAC地址計算。uuid模塊使用getnode()來獲取當前系統的MAC值。

        
        	
        1. import uuid
        2.  
        3. print(hex(uuid.getnode()))

        如果一個系統有多個網卡,那么相應地便會有多個MAC地址,并且可能返回其中任意一個值。

        要為一個主機(由其MAC地址標識)生成一個UUID,需要使用uuid1()函數。節點標識符參數是可選的;如果沒有設置這個域,那么便會使用getnode()返回的值。

        
        	
        1. import uuid
        2.  
        3. u = uuid.uuid1()
        4.  
        5. print(u)
        6. print(type(u))
        7. print('bytes :', repr(u.bytes))
        8. print('hex :', u.hex)
        9. print('int :', u.int)
        10. print('urn :', u.urn)
        11. print('variant :', u.variant)
        12. print('version :', u.version)
        13. print('fields :', u.fields)
        14. print(' time_low : ', u.time_low)
        15. print(' time_mid : ', u.time_mid)
        16. print(' time_hi_version : ', u.time_hi_version)
        17. print(' clock_seq_hi_variant: ', u.clock_seq_hi_variant)
        18. print(' clock_seq_low : ', u.clock_seq_low)
        19. print(' node : ', u.node)
        20. print(' time : ', u.time)
        21. print(' clock_seq : ', u.clock_seq)

        對于返回的UUID對象,可以通過只讀的實例屬性訪問它的各個部分。有些屬性是UUID值的不同表示,如hex、int和urn。

        由于有時間分量(time),所以每次調用uuid1()都會返回一個新值。

        
        	
        1. import uuid
        2.  
        3. for i in range(3):
        4. print(uuid.uuid1())

        在這個輸出中,只有時間分量(串的開始部分)有變化。

        由于每個計算機有不同的MAC地址,所以在不同系統上運行這個示例程序會生成完全不同的值。下一個例子傳遞不同的節點ID來模擬在不同主機上運行。

        
        	
        1. import uuid
        2.  
        3. for node in [0x1ec200d9e0, 0x1e5274040e]:
        4. print(uuid.uuid1(node), hex(node))

        除了返回不同的時間值,UUID末尾的節點標識符也有變化。

        1.2 UUID 3和5 基于名字的值

        有些情況下可能需要根據名字創建UUID值,而不是根據隨機值或基于時間的值來創建。UUID3和5規范使用密碼散列值(分別使用MD5或SHA-1),將特定于命名空間的種子值與名字相結合。有一些由預定義UUID值標識的公開的命名空間,分別用于處理DNS、URL、ISO OID和X.500識別名(Distinguished Name)。通過生成和保存UUID值,還可以定義新的特定于應用的命名空間。

        
        	
        1. import uuid
        2.  
        3. hostnames = ['www.doughellmann.com', 'blog.doughellmann.com']
        4.  
        5. for name in hostnames:
        6. print(name)
        7. print(' MD5 :', uuid.uuid3(uuid.NAMESPACE_DNS, name))
        8. print(' SHA-1 :', uuid.uuid5(uuid.NAMESPACE_DNS, name))
        9. print()

        要從一個DNS名創建UUID,可以把uuid.NAMESPACE_DNS作為命名空間參數傳入uuid3()或uuid5()。

        不論什么時間計算或者在哪里計算,一個命名空間中給定名的UUID值總是相同的。

        
        	
        1. import uuid
        2.  
        3. namespace_types = sorted(
        4. n
        5. for n in dir(uuid)
        6. if n.startswith('NAMESPACE_')
        7. )
        8. name = 'www.doughellmann.com'
        9.  
        10. for namespace_type in namespace_types:
        11. print(namespace_type)
        12. namespace_uuid = getattr(uuid, namespace_type)
        13. print(' ', uuid.uuid3(namespace_uuid, name))
        14. print(' ', uuid.uuid3(namespace_uuid, name))
        15. print()

        但是命名空間中相同名字的UUID值則是不同的。

        1.3 UUID 4 隨機數

        有時,基于主機和基于命名空間的UUID值“差別還不夠大”。例如,如果UUID要作為散列鍵,則需要有區分度更大、更隨機的值序列來避免散列表中出現沖突。讓值有更少的共同數字也能更容易地在日志文件中查找這些值。為了增加UUID的區分度,可以使用uuid4()利用隨機的輸入值生成UUID。

        
        	
        1. import uuid
        2.  
        3. for i in range(3):
        4. print(uuid.uuid4())
        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看