怎么判斷一個對象是可迭代對象還是迭代器
例子
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
