怎么判斷一個對象是可迭代對象還是迭代器
例子
from collections import Iterable, Iterator
lst = ['Today is Wednesday', 'Tomorrow is Thursday', 'The day after tomorrow is Friday']
it = lst.__iter__()
方案一
使用dir()函數查看對象的屬性列表,如果只有
__iter__()
函數則是可迭代的,如果__iter__()
和__next__()
函數都有則是迭代器。
一個數據類型中包含了__iter__函數表示這個數據是可迭代的
dir(數據): 返回這個數據可以執行的所有操作
判斷迭代器和可迭代對象的方案(野路子)
__iter__ 可迭代的
__iter__ __next__ 迭代器
print(dir(lst))
print(dir(it))
[__add__
, __class__
, __contains__
, __delattr__
, __delitem__
, __dir__
, __doc__
, __eq__
, __format__
,
__ge__
, __getattribute__
, __getitem__
, __gt__
, __hash__
, __iadd__
, __imul__
, __init__
,
__init_subclass__
, __ iter __ , __le__
, __len__
, __lt__
, __mul__
, __ne__
, __new__
, __reduce__
,
__reduce_ex__
, __repr__
, __reversed__
, __rmul__
, __setattr__
, __setitem__
, __sizeof__
, __str__
,
__subclasshook__
, append
, clear
, copy
, count
, extend
, index
, insert
, pop
, remove
, reverse
,
sort
]
[__class__
, __delattr__
, __dir__
, __doc__
, __eq__
, __format__
, __ge__
, __getattribute__
, __gt__
,
__hash__
, __init__
, __init_subclass__
, __ iter __ , __le__
, __length_hint__
, __lt__
, __ne__
, __new__
,
__ next __ , __reduce__
, __reduce_ex__
, __repr__
, __setattr__
, __setstate__
, __sizeof__
, __str__
,
__subclasshook__
]
方案二
使用isinstance() 函數來判斷一個對象是否是一個已知的類型
判斷迭代器和可迭代對象的方案(官方)
from collections import Iterable, Iterator
isinstance(對象, Iterable) 是否是可迭代的
isinstance(對象, Iterator) 是否是迭代器
print(isinstance(lst, Iterable)) #
print(isinstance(it, Iterator)) #
True
True