Python中使用Frozenset對(duì)象的案例詳解
這篇文章將介紹在Python中使用 "frozenset "函數(shù)的指南,該函數(shù)返回一個(gè)新的frozenset類型的Python對(duì)象。這些對(duì)象類似于Python中的set對(duì)象,但有一些關(guān)鍵的區(qū)別。本文的所有代碼樣本都是在Ubuntu 21.04上用Python 3.9.5測(cè)試的。
關(guān)于Frozensets
frozenset 函數(shù)接收一個(gè)可迭代類型的 Python 對(duì)象的參數(shù),并返回一個(gè)新的 frozenset 類型的 Python 對(duì)象。一個(gè) frozenset 類型的對(duì)象是一個(gè)可散列的、不可改變的 Python 對(duì)象,其元素在整個(gè)生命周期內(nèi)是凍結(jié)的或不可改變的。與元素可以隨時(shí)改變的集合類型的Python對(duì)象相反,frozenset中的所有項(xiàng)目都保持不變。frozensets 的用法可以通過例子得到最好的理解。下面將解釋其中的一些。
創(chuàng)建一個(gè)新的Frozenset對(duì)象
要獲得一個(gè)新的 frozenset類型的對(duì)象,只需提供任何可迭代的類型作為frozenset函數(shù)的可選參數(shù)。下面是一個(gè)代碼示例。
l = [1, 2, 3, 4] fset = frozenset(l) print (fset) print (type(fset))
代碼中的第一條語句定義了一個(gè)新的列表,它被簡單地稱為 "l"。接下來,通過調(diào)用frozenset函數(shù)并提供列表作為參數(shù),創(chuàng)建了一個(gè)新的frozenset對(duì)象。運(yùn)行上述代碼示例后,你應(yīng)該得到以下輸出。
frozenset({1, 2, 3, 4}) <class 'frozenset'>
正如你在輸出中看到的,fset是一個(gè)frozenset類型的對(duì)象,它使用了Python中set也使用的大括號(hào)語法。Frozenset只包含唯一的項(xiàng)目,因?yàn)椴辉试S有重復(fù)的項(xiàng)目,這一點(diǎn)與Python的set類型對(duì)象非常相似。每個(gè)frozenset類型的對(duì)象都是一個(gè) Python 集合,但反之亦然,因?yàn)榧享?xiàng)可以通過調(diào)用一些方法來改變。注意,你可以通過調(diào)用沒有任何參數(shù)的frozenset函數(shù)來創(chuàng)建一個(gè)空的frozenset。
一旦創(chuàng)建了Frozenset,你就不能修改它了
如前所述,一個(gè)frozenset類型的對(duì)象有一些項(xiàng)目,在其生命周期內(nèi)不會(huì)改變。雖然你可以用 frozenset 類型對(duì)象使用 Python 集合的方法,但是如果你試圖使用改變?cè)?strong>frozenset對(duì)象本身的方法,就會(huì)出現(xiàn)錯(cuò)誤。下面是一個(gè)例子。
l = [1, 2, 3, 4] new_set = set(l) new_set.remove(1) print (new_set) fset = frozenset(l) fset.remove(1)
在上面的代碼示例中,有兩條語句調(diào)用了集合類型對(duì)象的 "刪除"方法。雖然一個(gè)項(xiàng)目被成功地從 "new_set"中刪除,但當(dāng)對(duì) "fset"調(diào)用remove方法時(shí),卻拋出了一個(gè)錯(cuò)誤。運(yùn)行上述代碼示例后,你應(yīng)該得到以下輸出。
{2, 3, 4} Traceback (most recent call last): File "main.py", line 9, in <module> fset.remove(1) AttributeError: 'frozenset' object has no attribute 'remove'
其他類似的方法,如 "add"、"pop"、"clear"、"discard "等,對(duì)forzensets不起作用。
與 Frozensets 一起使用的方法
所有不修改集合項(xiàng)的 Python 集合方法都對(duì)frozenset類型的對(duì)象有效。所以你可以比較兩個(gè)frozenset的等價(jià)或不等價(jià),迭代/循環(huán)它們,獲得兩個(gè)frozenset之間的共同或唯一元素,等等。下面是一個(gè)例子,顯示了一些與frozensets有關(guān)的方法。
fset1 = frozenset([1, 2, 3, 4]) fset2 = frozenset([3, 4, 5, 6]) print (fset1.intersection(fset2)) print (fset1.union(fset2)) print (fset1.difference(fset2)) print (len(fset1)) print (len(fset2))
這些代碼是不言自明的。一些不改變?cè)?strong>frozensets值的方法已經(jīng)被調(diào)用。這些方法主要用于比較兩個(gè)不同frozensets的元素。運(yùn)行上述代碼樣本后,你應(yīng)該得到以下輸出。
frozenset({3, 4}) frozenset({1, 2, 3, 4, 5, 6}) frozenset({1, 2}) 4 4
其他一些處理凍結(jié)集的方法有:"issubset"、"issuperset"、"symmetric_difference"、"copy",等等。像">"、"<"、">="和"<="這樣的等價(jià)運(yùn)算符也適用于frozenset類型對(duì)象。
Frozenset可以被轉(zhuǎn)換為其他可迭代類型
你可以通過調(diào)用它們的主構(gòu)造函數(shù)將frozenset類型的對(duì)象轉(zhuǎn)換為其他可迭代的對(duì)象。下面的代碼示例顯示了將frozenset類型對(duì)象轉(zhuǎn)換為list、tuple和set類型對(duì)象。
fset = frozenset([1, 2, 3, 4]) print (list(fset)) print (tuple(fset)) print (set(fset))
運(yùn)行上述代碼樣本后,你應(yīng)該得到以下輸出。
[1, 2, 3, 4]
(1, 2, 3, 4)
{1, 2, 3, 4}
Frozenset使用案例
由于frozenset對(duì)象只不過是不可改變的/不可變的集合類型的 Python 對(duì)象,你可能會(huì)想知道它們的效用,因?yàn)榧峡偸强梢员挥脕泶嫠鼈儭?strong>frozenset最明顯的用例是用于聲明具有獨(dú)特元素的集合類型對(duì)象,而沒有在代碼中意外改變它們的風(fēng)險(xiǎn)。Frozenset類型的對(duì)象可以被用作字典的鍵,而集合則不能用于同樣的目的。由于frozenset是可散列的,它們可以在集合內(nèi)使用,而集合不能插入到另一個(gè)集合中??匆幌孪旅娴拇a。
fset = frozenset({4, 5}) s = {1, 2, fset} print (s) s = {1, 2, {4, 5}}
在第二條語句中,一個(gè)frozenset已經(jīng)在創(chuàng)建過程中被添加到一個(gè)集合中。在最后一條語句中,一個(gè)集合類型的對(duì)象被用在另一個(gè)集合里面。運(yùn)行上述代碼示例后,你應(yīng)該得到以下輸出。
{frozenset({4, 5}), 1, 2} Traceback (most recent call last): File "main.py", line 27, in <module> s = {1, 2, {4, 5}} TypeError: unhashable type: 'set'
正如你在輸出中看到的,forzensets可以被添加到其他集合中。另一方面,將一個(gè)集合添加到另一個(gè)集合中會(huì)產(chǎn)生一個(gè)錯(cuò)誤,因?yàn)榧现唤邮芸缮⒘蓄愋偷捻?xiàng)目。
總結(jié)
Frozensets提供了一種創(chuàng)建不可變的集合的方法。它們只接受唯一的元素,并且是可散列類型的對(duì)象,所以它們可以在其他只接受可散列對(duì)象作為子對(duì)象的 Python 對(duì)象中使用。
到此這篇關(guān)于如何在Python中使用Frozenset對(duì)象的文章就介紹到這了,更多相關(guān)Python Frozenset對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用shutil實(shí)現(xiàn)拷貝文件功能
shutil?是一個(gè)?Python?內(nèi)置模塊,該模塊對(duì)文件的復(fù)制、刪除和壓縮等操作都提供了非常方便的支持。本文將利用shutil實(shí)現(xiàn)拷貝文件功能,需要的可以參考一下2022-07-07selenium查找網(wǎng)頁出現(xiàn)加載卡頓或失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了selenium查找網(wǎng)頁時(shí)如何處理網(wǎng)站資源一直加載非??D或者失敗的情況,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-10-10Python中請(qǐng)使用isinstance()判斷變量類型
這篇文章主要介紹了Python中請(qǐng)使用isinstance()判斷變量類型,本文先是給出了isinstance函數(shù)判斷變量類型的例子,并對(duì)isinstance 和 type的區(qū)別做了講解,需要的朋友可以參考下2014-08-08Python利用ElementTree模塊處理XML的方法詳解
ElementTree是python的XML處理模塊,它提供了一個(gè)輕量級(jí)的對(duì)象模,下面這篇文章就來給大家介紹了關(guān)于Python利用ElementTree模塊處理XML的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-08-08python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實(shí)現(xiàn)與顯示GIF動(dòng)畫的詳細(xì)方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動(dòng)畫的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03python 實(shí)現(xiàn)多進(jìn)程日志輪轉(zhuǎn)ConcurrentLogHandler
這篇文章主要介紹了python 實(shí)現(xiàn)多進(jìn)程日志輪轉(zhuǎn)ConcurrentLogHandler,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03