问题
何为可迭代对象?
通俗点讲:什么样的对象(记为:object
)可以这样访问:
for i in object
# do something here
pass
答案:
- 具有特殊方法
__iter__
或__getitem__
对象是可迭代的对象 - python解释器优先寻找方法
__iter__
,如果不存在则再找方法__getitem__
,如果都不存在,则抛出TypeError
异常 - 如果需要定义可迭代对象,则需要实现
__iter__
或__getitem__
方法
举个例子(查看对象是否可迭代):
# 1,通过dir(object)查看是否有__iter__或__getitem__方法
# 2,通过hassattr(object, '__iter__')、hassattr(object, '__getitem__')查看
>>> dir(str)
['__add__','__eq__', '__format__', '__ge__', '__getitem__'] # 部分被删减
>>> hasattr(str, '__getitem__') or hasattr(str, '__iter__')
True
注意:
请注意可迭代与迭代器之间的区别,这里讲述的是可迭代性。