容器 & 可迭代对象 & 迭代器 & 生成器

容器

通常这类数据结构把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存,比如迭代器和生成器对象)
常见的容器:

  • list, deque, ....
  • set, frozensets, ....
  • dict, defaultdict, OrderedDict, Counter, ....
  • tuple, namedtuple, …
  • str

容器是一系列元素的集合,str、list、set、dict、file对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象。

可迭代对象

迭代器有一种具体的迭代器类型,比如list_iterator,set_iterator。可迭代对象实现了iter方法,并且该方法会返回一个迭代器对象

In [2]: import dis In [3]: li = [1,2,3] In [9]: dis.dis('for i in li:print(i)') 1 0 SETUP_LOOP 20 (to 22) 2 LOAD_NAME 0 (li) 4 GET_ITER >> 6 FOR_ITER 12 (to 20) 8 STORE_NAME 1 (i) 10 LOAD_NAME 2 (print) 12 LOAD_NAME 1 (i) 14 CALL_FUNCTION 1 16 POP_TOP 18 JUMP_ABSOLUTE 6 >> 20 POP_BLOCK >> 22 LOAD_CONST 0 (None) 24 RETURN_VALUE

迭代器

任何实现了__iter____next__()方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:魏浩~公司:杭州龙居门业有限公司 【日精进打卡第13天】 【知~学习】 《六项精进》1遍共1遍 《大学》1遍...
    A0魏浩富贵龙别墅门阅读 130评论 0 0
  • 鲜花养护: 第一步:配置保鲜剂,洗干净花瓶,取保鲜剂倒入瓶中,按配比加入适量自来水(直接来自水龙头未经处理过的水)...
    Sunnytang阅读 223评论 0 0