快捷搜索: 王者荣耀 脱发

容器,可迭代对象,迭代器

容器(container)

容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。通常这类数据结构把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存,比如迭代器和生成器对象)在Python中,常见的容器对象有:

    list, deque, …. set, frozensets, …. dict, defaultdict, OrderedDict, Counter, …. tuple, namedtuple, …
    str 从技术角度来说,当它可以用来询问某个元素是否包含在其中时,那么这个对象就可以认为是一个容器,比如 list,set,tuples,dict都是容器对象: 尽管很多容器都提供了通过某种方式来获取其中的元素,这不是容器本身具有这种能力,而是可迭代对象赋予了容器的能力,也不是所有容器都可以迭代。 可迭代对象(iterable) 但凡是可以返回一个迭代器的对象都可称之为可迭代对象,例如: list是可迭代对象,dict是可迭代对象,set也是可迭代对象,迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。迭代器有一种具体的迭代器类型,比如list_iterator,set_iterator。可迭代对象实现了__iter__方法,该方法返回一个迭代器对象。 迭代器(iterator) 那么什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是如何实现的这并不重要。 所以,迭代器就是实现了工厂模式的对象,它在你每次你询问要下一个值的时候给你返回。迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。 每次调用next()方法的时候做两件事: 为下一次调用next()方法修改状态 为当前这次调用生成返回结果。
经验分享 程序员 微信小程序 职场和发展