[英]Detect an enumerate object in python
如果我有清單
L = range(10)
我可以使用列表將其匹配
isinstance(L, list)
但是,如果我想列舉一下
M = enumerate(L)
現在它成為一個枚舉對象,它與列表不匹配,並且枚舉不是我可以使用isinstance進行匹配的標准python對象。
匹配枚舉對象的最優雅方法是什么?
為什么它不是標准的python對象? 您可以使用isinstance(M, enumerate)
檢查:
In [128]: e
Out[128]: <enumerate at 0x6933b70>
In [129]: type(e)
Out[129]: enumerate
In [130]: isinstance(e, enumerate)
Out[130]: True
提供enumerate
作為isinstance
的第二個參數應該可以正常工作:
isinstance(M, enumerate)
請參見下面的演示:
>>> M = enumerate(range(10))
>>> M
<enumerate object at 0x020B7EB8>
>>> isinstance(M, enumerate)
True
>>>
這就是文檔所說的*:
isinstance(object,classinfo)
如果object參數是classinfo參數或其>(直接,間接或虛擬)子類的實例,則返回true。 如果object不是給定類型的對象,則該函數始終返回false。 如果classinfo不是類(類型對象),則它可能是類型對象的元組,或者可以遞歸包含其他此類元組(不接受其他序列類型)。 如果classinfo不是類型或此類的元組,則引發TypeError異常。
*我加粗體。
雖然我看不到您為什么要這樣做,但是您可以簡單地匹配類型:
>>> enumerate
<type 'enumerate'>
>>> isinstance(enumerate(range(10)),enumerate)
True
聽起來好像您真正想要做的是測試以查看是否可以使用for
循環遍歷類型。 這樣做的方法是測試稱為__iter__
的方法:
if hasattr(l, '__iter__'):
# do something with the iterable
或者,您可以使用標准庫:
from collections.abc import Iterable
if isinstance(l, Iterable):
# do something with the iterable
這種方法將非常適合列表, enumerate
,元組和任何可迭代的自定義對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.