迭代器
简介:
可被
next()
函数调用,并不断返回下一个值的对象。
可迭代对象与迭代器
可迭代对象: 生成器、元组、列表、集合、字典、字符串 。可直接用于
for
循环。
在Python中俩者之间是有区别的,但也有一定的关联。
① 迭代器可被能接受可迭代对象的函数接受
② 可用内置函数iter()
将可迭代对象 —> 迭代器
判断是否可迭代器
from collections import Iterable
list_1 = [1, 2, 3, 5, 6]
if isinstance(list_1, Iterable):
print('可迭代')
生成器
简介:
生成一个迭代器的函数。
与普通函数的区别:
① 需要将普通函数中的return
改成yield
② 调用时,不会立刻执行,需推迟至需要调用其中的每个元素才执行,故生成器每调用一次会产生一次元素。为惰性计算。
惰性计算
后面将会学到的
Spark
中所采用的也是惰性计算(lazy conputting) 技术
,它的目的是要最小化计算机要做的工作。
生成器的使用
案例一
def test(length):
a, b = 0, 1
n = 0
while n < length: # n从0开始总共执行8次
yield b # 每当执行到yield,则先返回值,在执行返回执行下一行代码
a, b = b, a + b
n += 1
generator = test(8)
for i in range(0,8):
print(next(generator))
"""Result:
1
1
2
3
5
8
13
21
"""
案例二
generator = (x*3 for x in range(10))
while True:
try:
e = next(generator)
print(e)
except:
print('没有更多元素')
break
"""Result:
0
3
6
9
12
15
18
21
24
27
没有更多元素
"""
醉后
以上是在通过书籍以及相关的视频所学习的,如有错误或对迭代器及生成器解释不全望各位大佬指点。🐷