迭代器是容器型数据类型(可以遍历,也可以转换成列表),无法直接提供迭代器,只能将其他序列转换成迭代器。
特点:
任何数据都可以作为迭代器的元素
1)创建迭代器
i1 = iter('abc')
i2 = iter([10, 20, 30, 40])
i3 = iter((10, 1.23, 'abc', True, [10, 20]))
2)打印迭代器无法查看元素
print(i1) #
print(i2)
print(i3)
3)迭代器无法统计个数
# print(len(i1)) # 报错
1)获取单个元素:
next(迭代器) - 获取迭代器最前面的元素
print(next(i1)) # a
print(next(i1)) # b
print(next(i1)) # c
# print(next(i1)) # 空迭代器next操作会报错print(next(i2)) # 10
print(list(i2)) # [20, 30, 40]
# print(next(i2)) # 报错(转换成列表时,已取走元素)
2)遍历迭代器
for 变量 in 迭代器:循环体
for x in i3:print(x)print(list(i3)) # []
1)容器(是一种可以创建多个数据的容器),生成器中保存的是创建数据的方法,而不是数据本身。
2)特点:
3)获取元素:和迭代器获取元素的方式一样
def func1():yieldprint('hello')return 100result = func1()
print('result:', result)
print('result:', list(result)) # hello result: [None]
def func2():print('+++')yield 100print('---')yield 200print('***')yield 300gen2 = func2()
print(list(func2()))
print('next:', next(gen2))
print('next:', next(gen2))
print('next:', next(gen2))print('------------------------------华丽分割线-----------------------------')def func3(n):yield 100if n % 2 == 0:yield 200yield 300gen3 = func3(3)
print(list(gen3))
# print('next:', next(gen3)) # 报错,gen3已经全取出来转化成列表