容器(container)
容器是一种把多个元素组织在一起的数据结构,容器中的元素可以迭代获取,可用in, not in关键字判断元素是否包含在容器中。在Python中,常见的容器对象有:list(列表),set(集合),dict(字典),tuple(元组),str(字符串)(也有相关资料说str是原子类型数据,不属于容器范畴)等。
可迭代对象(iterable)
很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的files,sockets等等。但凡是可以返回一个迭代器的对象都可称之为可迭代对象。
原理
- 生成这个可迭代对象(实现了__iter__方法的就叫可迭代对象)的迭代器(xx.__iter__())。
- 用迭代器协议(实现了__next__方法)去不断访问对象,捕捉到StopIteration就停止迭代。
好处
for循环遵循迭代器协议去访问对象,这样统一了访问接口,更加通用(这也是协议的好处)。
可以使用isinstance()判断一个对象是否是可迭代对象
可以自己创建一个容器,实现了迭代器协议,可以通过for,next方法进行迭代,在迭代的末尾,会引发stopIteration异常。
要创建一个生成器,有很多种方法。
第一种⽅法很简单,只要把一个列表生成式的 [ ] 改成 ( )
第二种通过yield语句快速生成迭代器,可以不用iter和next方法
唤醒生成器
使用next()函数来唤醒生成器继续执行外,还可以使用send()函数来唤醒执行。使用send()函数的一个好处是可以在唤醒的同时向断点处传入一个附加数据。