代理迭代
一、 解决问题
你构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。 你想直接在你的这个新容器对象上执行迭代操作。
二、解决方案
> __iter__() 重写这个方法
三、代码说明
#!/usr/bin/env python
class Node:
def __init__(self, value):
self._value = value
self._children = []
def __repr__(self):
return "Node({!r})".format(self._value)
def add_child(self, node):
self._children.append(node)
def __iter__(self):
return iter(self._children)
if __name__ == "__main__":
root = Node(0)
c1 = Node(1)
c2 = Node(2)
root.add_child(c1)
root.add_child(c2)
for ch in root:
print (ch)
四、关联知识
五、总结
1. Python 的迭代器协议需要__iter__() 方法返回一个实现了__next__() 方法的迭代器对象。
2. iter() 函数的使用简化了代码,iter(s) 只是简单的通过调用s.__iter__() 方法来返回对应的迭代器对象
六、代码地址
github地址:https://github.com/weichen666/python_cookbook
目录/文件:fourth_selection/learn_iter_iter.py