什么是迭代器:
迭代:更新换代的过程,每次迭代都必须基于上一次的结果
迭代器:迭代取值的工具
迭代器特点:
1:只能往后面走,
为什么要用:
迭代器给你提供了一种不依赖于索引的取值方式
可迭代对象:
只要内置有iter方法的都叫作可迭代对象
# 读法: 双下iter(标准一些) or 魔法方法
n = 1 # 没有
f = 1.1 # 没有
s = 'hello' # 有
l = [1,2,3] # 有
t = (1,2,3) # 有
s1 = {1,2,3} # 有
d = {'1':'2'} # 有
f1 = open('xx.txt','w',encoding='utf-8') # 有
文件对象本身就是迭代器对象
def func():pass # 没有
需要迭代取值的数据类型
"""
字符串,
列表,
元组,
字典, # 无序
集合, # 无序
文件对象 # 本来就是迭代器对象
"""
如何用:
# 不是迭代
n = 0
while True:
print(n)
# 算是迭代(依赖索引)
l = [1,2,3,4]
n = 0
while n < len(l):
print(l[n])
迭代器取值
迭代器取值迭代器对象
1:对象有iter方法
2:内置有next方法
ps:迭代器一定是可迭代对象
可迭代对象不一定是迭代器对象………………7.04(03)
可迭代对象不会直接由next
(文件 本身就是迭代器对象)
迭代器取值
l = [1,2,3,4] # 生成一个迭代器对象 iter_l = l.iter() # 迭代器取值 调用next print(iter_l.next()) # >>>1 print(iter_l.next()) # >>>2 print(iter_l.next()) # >>>3 print(iter_l.next()) # >>>4 print(iter_l.next()) # 取完了 直接报错
for循环原理
for循环内部的本质
1.将in后面的对象调用iter转换成迭代器对象
2.调用next迭代取值
3.内部有异常捕获StopIteration,当next报这个错 自动结束循环
for循环
'''
for循环后面的跟的是可迭代对象
for 循环内部的本质
1:将in后面的对象效调用iter转换为迭代器对象s
所以有一个'print(iter_f is f1'
迭代器对象无论执行多少次执行iter方法,得到的还是迭代器本身
2:调用next迭代取值
3:内部有异常捕获StopIteration的方法,遇到错误就结束循环
生成器
yield
迭代器生成器:
def func(): print('first') yield 1 # 如果函数内部有yield关键字,那么加括号运行的时候不会触发函数内部代码执行 func() # 初始化生成器()
生成器表达式
res = (i for i in range(1,10) if i != 4) # 生成器表达式 # # 生成器写好了不会主动执行任何一行代码 # # 必须通过next触发代码执行 # # 写好的时候不执行,只是调用的时候才执行, print(res.next()) print(res.next()) print(res.next()) print(res.next())