Python中的iterable该怎么理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的iterable该怎么理解相关的知识,希望对你有一定的参考价值。

iterable就是可迭代,可以理解为数组
如果变量 x是iterable的,那么可以在需要生成一组值的语句,函数里使用

for x :print(x) # 迭代x中的每个值,并打印
list(x) #将x转换成列表
参考技术A 迭代,可以理解为连续的一组数据,可以遍历的数据,包含内置的string、list、dict、tuple、set()本回答被提问者和网友采纳

如何理解 Java 中的 `Iterable` 和 `Iterator`? [复制]

【中文标题】如何理解 Java 中的 `Iterable` 和 `Iterator`? [复制]【英文标题】:How to understand the `Iterable` and `Iterator` in Java? [duplicate] 【发布时间】:2016-02-23 02:04:23 【问题描述】:

我有这些代码:

class ReversibleArrayList<T> extends ArrayList<T> 
    public ReversibleArrayList(Collection<T> c) 
        super(c);
    

    public Iterable<T> reversed() 
        return new Iterable<T>() 
            public Iterator<T> iterator() 
                return new Iterator<T>() 
                    int current = size() - 1;

                    @Override
                    public boolean hasNext() 
                        return current >= 0;
                    

                    @Override
                    public T next() 
                        return get(current--);
                    

                    @Override
                    public void remove() 
                        throw new UnsupportedOperationException();
                    
                ;
            
        ;
    

此代码用于使ArrayList 可以在foreach 中反转。

有两个问题:

1、看不懂方法public Iterable&lt;T&gt; reversed(), 这个方法的返回值是Iterable,还有Iterator

2、我觉得Interable只是一个接口,接口可以用来做返回值吗?

【问题讨论】:

这应该对你有用***.com/questions/6863182/… 为什么要扩展 ArrayList?!你不想让ReversedList 成为List 的装饰器吗? @СӏаџԁеМаятіи 我只希望ArrayList 可以从头到尾移动。 大多数人会像这样创建一个交互器:list.listIterator(list.size()); 然后使用previous():while(list.hasPrevious()) ... list.previous() ... 【参考方案1】:

reversed() 创建并返回新的 Anonymous 类(这意味着,它创建了一些实现 Iterable 的未命名类的对象),它实现了 Iterable 接口并实现了该接口的方法 iterator()。 是的,接口可以用作返回类型,这是 OOP 的概念。这意味着该方法可以返回实现此接口的所有内容。

【讨论】:

【参考方案2】:

当然可以使用接口作为返回类型。它只是说,对象类实现了接口,因此它的所有方法都可用。匿名类满足这些方法要求,可以用作返回类型。

代码看起来很复杂,因为使用了一个匿名类,并且对象被快速连续地创建和返回。

可迭代:

“实现这个接口允许一个对象成为“foreach”语句的目标。”

来源:http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html

迭代器:

"[...] 迭代器通常指向集合中的单个实例。可迭代意味着可以从对象获取迭代器以遍历其元素 - 并且不需要迭代单个实例,这是迭代器所代表的。”

来源:PaulJWilliams 回答Why is Java's Iterator not an Iterable?

【讨论】:

匿名类是java中推荐使用的方式\?可以修改这些代码以便更好地理解,例如不使用匿名类? @BlackMamba 我认为在这种情况下没关系,因为整个类只包含这段代码(我假设),所以它不会变得那么混乱。这只是一个可读性的问题:如果有任何东西过于拥挤,你最好将代码分成两个类。

以上是关于Python中的iterable该怎么理解的主要内容,如果未能解决你的问题,请参考以下文章

Python中的iterable该怎么理解

python iter函数用法

Python iter方法使用说明

python中的next()以及iter()函数

Python 迭代器 & __iter__方法

python中的next()以及iter()函数