day 13 迭代器、可迭代对象、迭代器对象、生成器、生成器对象、枚举对象

迭代器大概念

# 迭代器:循环反馈的容器(集合类型)
# -- 不同于索引取值,但也可以循环的从容器对象中从前往后逐个返回内部的值

# 优点:不依赖索引,完成取值
# 缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值)

 

可迭代对象

# 可迭代对象:内置有__iter__()方法的对象,称之为可迭代对象

# 可迭代对象:str | list | tuple | set | dict | range() | enumerate() | file | 生成器对象

 

迭代器对象

# 迭代器对象:内置有__next__()方法的对象,称之为迭代器对象,可以通过调用__next__()方法完成取值

# 迭代器对象:enumerate() | file | 生成器对象

# 注:迭代器对象调用__iter__()方法返回的还是迭代器对象
重点:
1.从迭代器对象中取元素,取一个少一个,如果要从头开始去,需要重新获得拥有所有元素的迭代器对象
2.迭代器对象也有__iter__()方法,调用后得到的是自己本身(当前含有几个元素,得到的就只有几个元素的迭代器对象)

 

迭代器

# 迭代器:for循环
# 工作原理:
# -- 1.获取可迭代对象的迭代器对象
# -- 2.循环__next__()取值
# -- 3.异常处理(StopIteration),停止迭代

 

生成器

# 生成器:一次生成一个值的容器(函数类型)
# -- 内部包含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

 

生成器对象

# 生成器对象:就是一个迭代器对象
# -- 可以通过__next__()方法取值,得到yield关键字的返回值
# -- 可以调用send()方法给yield关键字传值,内部接收yield关键字可以得到传入的值

 

枚举对象

# 枚举对象:通过enumerate()方法,可以为可迭代对象生成迭代索引,其本身也是一个迭代器对象

 

猜你喜欢

转载自www.cnblogs.com/maoruqiang/p/10663110.html
今日推荐