温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python怎么实现外部迭代器

发布时间:2022-01-13 16:40:49 来源:亿速云 阅读:120 作者:iii 栏目:大数据

本篇内容介绍了“Python怎么实现外部迭代器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

效果

迭代器简化了聚合的接口

一般来讲,聚合类内部实现的不同或多或少都会影响到聚合类的接口,访问其子元素的接口也是如此。由于设计者经验和能力的限制,经常需要增加接口或修改接口。使用迭代器模式之后,聚合类只需要提供取得迭代器的接口,接下来访问聚合类的子元素的操作都可以通过迭代器来进行,而不需要另外准备其他的访问子元素接口。另外由于迭代器接口已经经过了长时间各种情况的考验,已被证明可以满足大多数情况的需求,啥意思啊基本上不再需要聚合类增加其他的访问方式。

支持在一个聚合上同时发生多个遍历操作

迭代器本身可以保存迭代的状态,一个自然的结果就是,可以同时对一个内聚类进行多个遍历。这一点在进行某些操作(例如排序)的时候非常有用。

支持以不同的方式遍历聚合

由于迭代器的实现已经独立于聚合类,只要替换迭代器就可以实现不同方式的遍历。

实现

外部迭代还是内部迭代

外部迭代是指由利用者控制迭代的动作,而内部迭代指的是由用户向迭代器提交操作时由迭代器自动执行迭代动作。接下来通过伪代码来说明这两种迭代器的区别。首先是外部迭代器:

Iterator it = Aggregate.CreateInterator();

while(!it.isDone())

{

    it.CurrentItem()->dosomething();

    it.next();

}

迭代的动作也就是next的调用由利用者控制。

Iterator it = Aggregate.CreateInterator();

while(!it.isDone())

{

    it.CurrentItem()->dosomething();

}

而内部迭代器,则会在用户向迭代器提交操作的时候,自动进行迭代动作。这种方式很方便,但是方便的另一面就是不够灵活,更不要说这种方便的好处很有限。因此大部分情况下,使用外部迭代器就好。

谁来实现迭代动作

这里有几个选择。一个是由迭代器来实现,这种情况下需要迭代器了解聚合类的内部结构,一定程度上破坏了封装性。另一个选择是由聚合类实现迭代动作,而迭代器只负责保存迭代的当前位置,这种方式的迭代器也被称为游标。这种方式也有一个问题那就是不够灵活,增加或者调整迭代算法都需要对聚合类进行修改。在实际的开发中,也可以使用第三种方法:聚合类提供基本的迭代功能,然后由另外的迭代器提供附加的功能。这些功能通常是对子元素的筛选。

是否需要空迭代器

空迭代器的IsDone方法总是返回true。它的作用是当聚合类没有下级节点的时候返回,这样使用迭代器的代码可以使用同样的逻辑处理下级节点而不需要判断聚合类是否返回迭代器。这样代码看起来更简洁。

是否需要健壮的迭代器

目前大部分迭代器都不支持在迭代的同时增加和删除元素。如果程序员真这么做了,一般的结果就是发生错误。实现这种所谓健壮的迭代器非常困难,所以通常的做法是将处理分为两步:先迭代检索操作对象,然后再另行操作。这种方式更容易实现。

“Python怎么实现外部迭代器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI