`

自定义迭代器iterator

阅读更多
python中迭代器的定义方式主要有两种,一种是通过类实现__iter__()方法,其返回一个实现了__next__()方法的object,如果该类自身实现了__next__(),则只需直接返回self即可,如下是一个拥有逆置功能的类:
#创建过程:
class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index -= 1
        return self.data[self.index]

#调用结果如下:
d = 'abcdefghi'
r = Reverse(d)
for ch in r:
    print(ch)



#输出结果:
i
h
g
f
e
d
c
b
a


另一种方式是利用生成器generator,通过关键字yield,简单实用,主要用于函数中,如下:
#创建过程:
def reverse(data):
    for i in range(len(data), 0, -1):
        yield data[i-1]

#调用过程:
d = 'abcdefg'
for ch in reverse(d):
    print(ch)



#输出结果:
g
f
e
d
c
b
a


从定义方式可看出,两者的区别主要是应用对象不同:前者用在类中,而后者用在函数或方法中。
分享到:
评论

相关推荐

    设计模式(C#)之迭代器模式(Iterator Pattern)

    开发者可以通过实现这些接口来创建自定义迭代器。 ```csharp public interface IEnumerable { IEnumerator<T> GetEnumerator(); } public interface IEnumerator { T Current { get; } bool MoveNext(); void ...

    jsp自定义迭代标签

    ### JSP自定义迭代标签详解 #### 一、引言 在JSP(JavaServer Pages)开发中,自定义标签可以极大地提高代码的复用性和可维护性。特别是在处理循环迭代逻辑时,自定义迭代标签能够使页面逻辑更加清晰、简洁。本文...

    Python迭代器iterator生成器generator使用解析

    要创建自定义迭代器,你需要定义一个类并实现`__iter__()`和`__next__()`方法。下面是一个简单的例子: ```python class CustomIterator: def __init__(self, max_value): self.max_value = max_value self....

    14.Python中的迭代器协议1

    迭代器协议是Python中的一种机制,它允许开发者自定义迭代器的行为,例如,自定义迭代器的返回值、迭代器的停止条件等。 在Python中,Generator也是迭代器的一种,它可以通过`yield`关键字来实现迭代。Generator...

    java迭代器模式实现正反向遍历

    在给定的代码示例中,通过创建自定义的迭代器类,实现了对包含10个数字的集合进行正向和反向遍历的功能。 ### 核心概念解析 #### 1. 迭代器接口(Iterator) 迭代器接口定义了访问和遍历聚合元素的方法。在这个...

    迭代器模式(Iterator)C++实现

    迭代器模式是一种设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。...通过实现自己的迭代器,你可以为自定义数据结构提供类似STL的迭代器功能,使得代码更加易用和可读。

    Android迭代器模式demo

    // 自定义迭代器类 private static class MyIterator<T> implements Iterator<T> { private List<T> elements; private int currentIndex; public MyIterator(List<T> elements) { this.elements = elements;...

    Java实现的自定义迭代器功能示例

    总之,自定义迭代器是Java编程中一种重要的技巧,它允许开发者根据需求定制迭代行为,尤其是在处理非标准集合结构时。这个示例提供了一个基础模板,可以根据实际需求进行修改和扩展,以适应各种复杂的数据结构和遍历...

    STL简单迭代器的实现

    通过自定义迭代器,我们可以更好地控制数据的访问和处理,同时也能为自定义容器提供类似STL的标准接口。不过,实际应用中,除非有特殊需求,通常建议直接使用STL提供的标准迭代器,因为它们已经经过优化并遵循了严格...

    python中实现迭代器(iterator)的方法示例

    通过定义自定义迭代器,我们可以灵活地控制迭代的过程,比如过滤特定类型的账户,或者在迭代过程中执行额外的操作。迭代器的这种灵活性和效率使得它们在处理各种数据结构和算法时非常有用。 总之,Python的迭代器...

    65丨迭代器模式(上):相比直接遍历集合数据,使用迭代器有哪些优势?1

    在实际开发中,虽然我们通常直接使用编程语言提供的迭代器类,但理解迭代器模式的工作原理有助于更好地利用这些工具,特别是在处理复杂数据结构或需要自定义遍历行为时。通过将遍历逻辑从集合类中分离,迭代器模式...

    Android设计模式之--迭代器模式

    2. **如何创建自定义迭代器**:根据需求,你可以为自己的聚合类实现一个迭代器,使其支持按特定顺序或条件遍历。 3. **迭代器模式与Android框架的结合**:在Android框架中,诸如Adapter(如ListView的Adapter)也...

    深入讲解Python中的迭代器和生成器

    #### 四、自定义迭代器 除了使用内置函数外,我们还可以通过定义自己的类来创建迭代器。这通常涉及实现 `__iter__()` 和 `__next__()` 方法。 示例代码如下: ```python class MyRange: def __init__(self, n): ...

    迭代器的例子

    在这个例子中,`MyList`类通过实现`iterator()`方法返回一个自定义的迭代器实例。这个迭代器维护了一个当前索引`currentIndex`,并提供了`hasNext()`和`next()`方法来遍历列表中的元素。 在实际应用中,迭代器广泛...

    iterator-demo 迭代器设计模式demo

    在“iterator-demo”项目中,你可能会看到如何创建一个自定义的聚合类和迭代器类,以及如何在客户端代码中使用这些类来遍历元素。这个例子将帮助你理解迭代器模式的工作原理,以及如何在实际项目中实现和使用。通过...

    C++使用iterator的例子

    在C++编程语言中,迭代器(Iterator)是一...`IteratorTest`示例展示了如何自定义迭代器并使用它们遍历自定义容器的元素。理解和熟练使用迭代器是掌握C++容器和算法库的关键步骤,也是提高代码效率和可读性的有效手段。

    iterator_adaptor.pdf

    Boost库中的`iterator_adaptor`是一个强大的工具,用于创建自定义迭代器。这个模板类允许程序员以一种灵活的方式包装现有的迭代器类型,以适应特定的需求或扩展其功能。`iterator_adaptor`的设计理念是基于`iterator...

    Scala语法(iterator迭代器)

    iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可以从集合获取一个迭代器 迭代器的两个基本操作 hasNext——查询容器中是否有下一个元素 ...

    Python 迭代器 iteraor

    另一个文件“iterator.consol.py”很可能包含了一些示例代码,展示了如何在Python交互式环境中使用迭代器,包括创建自定义迭代器类、使用内置的迭代器函数(如`enumerate()`、`zip()`等)以及处理异常。 总的来说,...

Global site tag (gtag.js) - Google Analytics