概述
1.关系图
2.迭代
使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表取值的过程。
3.可迭代对象
使用for循环遍历取值的对象叫做可迭代对象
元组,列表,字典,字符串,集合,range都是可迭代对象
3.1 如何判断一个对象是否可以迭代
可以使用 isinstance() 判断一个对象是否是 Iterable 对象:
In [50]: from collections import Iterable
In [51]: isinstance([], Iterable)
Out[51]: True
In [52]: isinstance({}, Iterable)
Out[52]: True
In [53]: isinstance('abc', Iterable)
Out[53]: True
In [54]: isinstance(mylist, Iterable)
Out[54]: False
In [55]: isinstance(100, Iterable)
Out[55]: False
4.迭代器
迭代器可以通过next()方法不断重复获取下一个值,直到所有元素全部输出完之后,返回StopIteration才停止。在python3中同时实现在__iter__()和__next__()两个魔法函数的对象,就是迭代器。其中__iter__()方法需要返回一个迭代器, 而__next__()方法返回下一个返回值或者StopIteration
5.生成器
生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和next方法),不需要再手动实现两方法。使用更加方便,它依然可以使用next函数和for循环取值
5.1生成器和迭代器的区别:
生成器在迭代的过程中可以改变当前迭代值,而修改普通迭代器的当前迭代值往往会发生异常,影响程序的执行。
生成器并不是一上来就把所有值装载进内存,因而也不会占用大量的内存,只是在需要使用next()函数获取值的时候,才会取一个值返回,内存开销非常小
具有yield关键字的函数都是生成器,yield可以理解为return,返回后面的值给调用者。不同的是return返回后,函数会释放,而生成器则不会。在直接调用next方法或用for语句进行下一次迭代时,生成器会从yield下一句开始执行,直至遇到下一个yield
6. iter()函数与next()函数
iter函数:获取可迭代对象的迭代器,会调用可迭代对象身上的__iter__方法
next函数:获取迭代器中下一个值,会调用迭代器对象身上的__next__方法
7. for循环的本质
遍历的是可迭代对象
for item in Iterable循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。
最后
以上就是受伤抽屉为你收集整理的迭代、可迭代对象、迭代器、生成器、for循环、iter()函数与next()函数的概念及关系的全部内容,希望文章能够帮你解决迭代、可迭代对象、迭代器、生成器、for循环、iter()函数与next()函数的概念及关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复