吾生也有涯,而知也无涯。

导航

python函数之可迭代对象、迭代器的判断

怎么判断一个对象是可迭代对象还是迭代器

例子

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

posted on 2018-12-12 18:19  JesseChang  阅读(3458)  评论(1编辑  收藏  举报