一、迭代器
(一).可迭代对象
凡是内置有_iter_()
方法的对象(iterable)都称之为可迭代的对象。
可迭代对象:str 、list 、tuple 、dict 、set 、file 、迭代器对象 、生成器
执行可迭代对象下的_iter_()
方法,返回的值就是一个迭代器对象iterator。
dic={'x':1,'y':2,'z':3}
iter_dic=dic.__iter__()
print(iter_dic) # <dict_keyiterator object at 0x0000026A4564BB38>
print(iter_dic.__next__()) # x
print(iter_dic.__next__()) # y
print(iter_dic.__next__()) # z
print(iter_dic.__next__()) # StopIteration 一种结束信号
(二).迭代器对象
有_next_()
方法的对象,也就是用该方法一次从迭代器对象中获取一个值。
从迭代器对象中取元素,取一个少一个,如果要从头开始去,需要重新获得拥有所有元素的迭代器对象
迭代器对象也有_iter_()
方法,调用后得到的是自己本身(当前含义几个元素,得到的就只有几个元素的迭代器对象)
for循环迭代
- 自动获取被迭代对象的迭代器对象
- 在内部一次一次调用
_next_()
方法取值; - 自动完成异常处理
二、生成器
包含yield关键字的函数就是生成器
def my_generator():
yield 1
yield 2
yield 3
g_obj = my_generator()
my_generator()并不会执行函数体,得到的返回值就是生成器对象
生成器对象就是迭代器对象
r1 = g_obj.__next__() # 1
for v in g_obj:
print(v) # 2 3 遵循取一个少一个的原则