每个可迭代函数返回的值都属于一个生成器对象
生成器对象会有一个next方法,调用该方法可以取到内部的各个值,最终next通过StopIteration异常来停止迭代
t = filter(lambda x:x%2==0, [1,2,3,4])
print(t.__next__())
print(t.__next__())
print(t.__next__())
2
4
Traceback (most recent call last):
File "/Users/chm/Downloads/study/use_lambda.py", line 24, in <module>
print(t.__next__())
StopIteration
可迭代函数的返回值可以直接转换成列表或元组,也可以使用循环来取得
# 返回值可以直接转换成列表
t = filter(lambda x:x%2==0, [1,2,3,4])
print(list(t))
[2, 4]
# 使用循环来取得
t = filter(lambda x:x%2==0, [1,2,3,4])
for i in t:
print(i)
2
4
生成器对象和迭代器对象的主要区别在于:生成器对象只能迭代一次,而迭代器对象可以迭代多次,所以,对可迭代函数的结果只能取一次,无法再次提取
t = filter(lambda x:x%2==0, [1,2,3,4])
print(list(t))
print(list(t))
[2, 4]
[]
生成器和迭代器的区别
1.迭代器是所有的内容都在内存里,使用next函数来依次往下遍历
2.生成器不回把内容放到内存里,每次调用next函数时,返回的都是本次计算出来的那个元素,用完之后立即销毁