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) 编辑 收藏 举报