1、Iterable:可迭代对象
可以直接作用于for循环的对象,叫做可迭代对象(Iterable)
注:
可直接作用于for循环的对象:
1、基本数据类型:list、set、dict、tuple、string
2、generator生成器:带有yield关键字的生成器函数
判断一个对象是否为可迭代对象:
from collctions import Iterable
isinstancce(obj, Iterable) # obj为可迭代对象返回True,否则返回False
注:
x for x in range(n) --> 生成一个新的列表,列表的数量及值由range决定
x for x in range(5) ==> [0, 1, 2, 3, 4]
2、Iterator:迭代器
迭代器:Iterator 不仅可以直接作用于for循环,也可以使用next()函数不断调用并获取下一个元素,直 到取出最后一
个元素,当获取最后一个元素的下一个元素时,会返回一个StopIteration 的错误
注: 可以使用next()函数调用并获取下一个元素的对象称为迭代器对象
判断一个对象是否为迭代器对象 :
from collctions import Iterator
isinstance(obj, Iterator) # obj是可迭代对象返回True,否则返回False
*next(obj) --> obj为迭代器对象,返回迭代器中的一个元素,当使用next,光标会向后移动,当光标无法再往后移动时,
调用next会报错
注:可迭代对象不一定是迭代器对象,但迭代器对象一定是可迭代对象
将list、set、dict、tuple、str转为Iterator对象:
语法格式:iter(obj)
3、generator:生成器
generator生成器:使用yield关键字的函数被称为生成器函数
使用yield的函数与使用普通函数的区别:
1、使用yield的函数返回一个生成器对象
2、普通函数的返回值属于程序员自己设置
yield:将一个函数拆分成多个模块,模块与模块之间为连续的 yield可以间接控制进程或线程
生成器可以认为是一个迭代器,使用方式与迭代器一致
例:
def func(): def func():
print(1) yield 100
print(2) yield 200
print(3) yield 300
print(type(func())) print(type(func()))
返回的是NoneType类型 返回的是generator类型,若用next打印,会依次打印出yield的数据