python 可迭代函数的返回对象 - 生成器对象

每个可迭代函数返回的值都属于一个生成器对象
生成器对象会有一个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函数时,返回的都是本次计算出来的那个元素,用完之后立即销毁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容