python 序列和對映 如何區分序列和對映

2021-10-19 20:27:21 字數 752 閱讀 4818

我想對乙個引數執行乙個操作,這個引數可能是乙個類似於對映的物件或乙個類似於序列的物件。我知道沒有一種策略是100%可靠的型別檢查,但我正在尋找乙個健壯的解決方案。在

基於這個answer,我知道如何確定某個東西是否是乙個序列,我可以在檢查物件是否是乙個對映之後進行這個檢查。在def ismap(arg):

# how to implement this?

def isseq(arg):

return hasattr(arg,"__iter__")

def operation(arg):

if ismap(arg):

# do something with a dict-like object

elif isseq(arg):

# do something with a sequence-like object

else:

# do something else

因為序列可以被看作是乙個對映,其中鍵是整數,所以我應該嘗試找到乙個不是整數的鍵嗎?或者我可以看看字串表示法?或者。。。?在

更新我選擇了silentghost的答案,因為它看起來是最「正確」的答案,但出於我的需要,我最終實現了以下解決方案:

^$本質上,我不想依賴abc,因為有許多自定義類的行為類似於序列和字典,但是仍然不能擴充套件python集合abc(參見@manoj注釋)。我認為keys屬性(由刪除他/她的答案的人提到)是乙個足夠好的對映檢查。在

擴充套件序列和對映abc的類也將與此解決方案一起工作。在

python序列對映操作

序列 表示索引為非負整數的有序物件的集合,包括字串,列表,元組 s是序列 1.s i 返回乙個序列索引為i的元素 2.s i j 返回乙個序列的切片。序列的一部分 3.s i j stride 返回乙個序列的切片,步長為stride 4.len s s中的元素數 5.min s s中的最小值 只能用...

如何區分MNO和MVNO

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!mvno mobile virtaul network operator 虛擬網路運營商,沒有自己的實體網路,通過租用mno mobile network operator 的網路來提供網路服務。我們知道spec規定operator之間是通過mcc...

如何區分SNAT和DNAT

從定義來講它們乙個是源位址轉換,乙個是目標位址轉換。都是位址轉換的功能,將私有位址轉換為公網位址。要區分這兩個功能可以簡單的由連線發起者是誰來區分 內部位址要訪問公網上的服務時 如web訪問 內部位址會主動發起連線,由路由器或者防火牆上的閘道器對內部位址做個位址轉換,將內部位址的私有ip轉換為公網的...