概述
委托迭代的概念和意图
当我们不满足于默认的可迭代对象时(列表和字典的行为需要做定制化时),我们需要创建一个新的可迭代对象,这个对象可以依据已有可迭代对象建立,例如本例当中,我们在列表的基础上增加其他特性以满足需求
实验代码
类的定义
这个案例当中,创建了一个Node类,它的行为根基是列表,因此__iter__(): 方法担当一个连接者的角色,使Node有了列表的特质。换句话说,在这个例子中,iter()方法只是简单地将迭代请求转发给对象内部持有的_children属性上。
实例化过程
值得注意的是,我们创建的所有实例都拥有Node的特性,因此可以多层次化地嵌套使用,尤其是其中的__repr__属性,这是本案例中最能体现定制化列表优势的点。在创建好祖孙三代节点之后,通过add_child功能,构建一个家谱图如下图所示
class Node:
def __init__(self,value):#初始化,包括定义一个可迭代对象,和用于实验的数值
self._value = value
self._children = []
def __repr__(self):#该函数负责在print时回显
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)#下面实例化祖孙三代的node节点
child1 = Node(1)
child2 = Node(2)
grandchild1 = Node(11)
grandchild2 = Node(22)
grandchild3 = Node(33)
grandchild4 = Node(44)
child1.add_child(grandchild1)#层层建立关系,形成家谱图
child1.add_child(grandchild2)
child2.add_child(grandchild3)
child2.add_child(grandchild4)
root.add_child(child1)#将实例化后的child1这个node 添加到root这个node中
root.add_child(child2)#将实例化后的child2这个node 添加到root这个node中
for ch in root:
print(ch)
for gch in ch:
print(gch)
实验结果
打印内容如预期
Node(1) #child1节点
Node(11) #child1的孙子1
Node(22) #child1的孙子2
Node(2) #child2节点
Node(33) #child2的孙子1
Node(44) #child2的孙子2
Process finished with exit code 0
最后
以上就是谨慎母鸡为你收集整理的[Python][迭代器和生成器]委托迭代委托迭代的概念和意图实验代码实验结果的全部内容,希望文章能够帮你解决[Python][迭代器和生成器]委托迭代委托迭代的概念和意图实验代码实验结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复