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<T> 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该怎么理解的主要内容,如果未能解决你的问题,请参考以下文章