Python中迭代器和生成器的区别?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python中迭代器和生成器的区别?

答:Python中生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析,同时节省内存。除了创建和保持程序状态的自动生成,当发生器终结时,还会自动跑出StopIterration异常。

列表、元组、字典、字符串都是可迭代对象。

数字、布尔值都是不可迭代的。

下面分别来说说这两者的具体区别:

1、迭代器

迭代器对象要求支持迭代器协议的对象。在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。

下面用个简单的列表来说迭代器的用法:

list = [1,2,3,4] # list是可迭代对象
lterator = iter(list) # 通过iter()方法取得list的迭代器
print(next(lterator)) # 1 通过next()获取下一个位置的值
print(next(lterator)) # 2
print(next(lterator)) # 3
print(next(lterator)) # 4

输出:
1
2
3
4

看完上面代码,我想很多人纳闷列表怎么可以有一个迭代器。由于面试题篇幅有限,大家如果想了解可迭代对象怎么可以获取迭代器呢?我下次面试题会继续展开分享 。

2、生成器

生成器(generator)就是一个函数,它提供了一种实现迭代器协议的便捷方式。生成器与普通函数的区别在于它包含 yield 表达式,并且不需要定义 __iter__()和__next__()。

生成器是一种惰性的序列,如果我们需要创建一个 0~1000000000 的序列,这样大的序列创建出来会占用比较多的内存,生成器就是为了解决这样的问题 。

下面用个简单的例子来说生成器的用法:

# 普通序列
>>> g = []
>>> for x in range(5):
>>>  g.append(x)
>>> g
[0, 1, 2, 3, 4]

# 生成器
def f():
 for x in range(5):
  yield x # 返回并记录函数状态
        
# next
f = f()
>>> next(f) # 每调用一次next,就执行一次yield | 依靠这种需要才生产的工作机制,大大的节省资源
0
>>> next(f)
1
>>> next(f)
2
>>> next(f)
3
>>> next(f)
4

# for next
>>> for x in range(5):
>>>  print(next(f))
0
1
2
3
4

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1、谈谈对 Python 和其他语言的区别?

2、谈谈对 Python3 和 Python2 的区别?

3、Python 的特点和优点是什么?

4、说说Python解释器种类以及特点?

5、说说4种常用编码的区别?

6、说说Python面向对象三大特性?

7、说说Python中有几种数据类型?

8、说说Python中xrange和range的区别?

9、Python变量、函数、类的命名规则?

10、说说Python可变与不可变数据类型?

11、说说Python模块主要分哪三类?

12、列举Python中的标准异常类?

13、Python中深拷贝与浅拷贝的区别?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • 面试题-python 什么是迭代器?

    前言 python 里面有 3 大神器:迭代器,生成器,装饰器.在了解迭代器之前,需弄清楚2个概念: 1.什么是迭代 2.什么是可迭代对象 迭代 如果给定一个list或tuple,我们可以通过for循 ...

  • Python学习——for循环,生成器,迭代器详解

    文章目录 Python的for循环 for循环示例 List 列表循环 dict 字典循环 列表生成式 生成器 列表式生成器 函数式生成器 生成器式生产者消费者模型 迭代器 什么是迭代器 再论for循 ...

  • Python生成器和迭代器有什么用?

    当我们学习Python的时候,会遇到很多专业的术语及工具,而对于这些很多人并不是很了解,比如说生成器和迭代器,Python的生成器和迭代器有什么区别?这是很多人都比较疑惑的问题,我们来看看吧. 迭代器 ...

  • 总算搞明白了!进程,线程,协程,生成器,迭代器搞的我脑子好乱!

    你是否曾经被迭代器,生成器,进程,线程,协程搞的脑子很乱? 而且剪不断,理还乱: 这不怪你,这是有历史原因.本文试图把东西都给理顺了. 一篇不行,咱们就再来一篇,使劲点赞. 两个问题,三种协程 先来看 ...

  • Python学习之迭代器和生成器有什么不同?

    迭代器和生成器区别是什么?相信很多人在初学Python的时候对它们都很好奇,接下来我们一起来看看它们的区别吧. 迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己的本身 ...

  • 生成器与迭代器的区别

    生成器与迭代器的区别

  • Python迭代器与生成器的区别!

    无论你是Python初学者还是爱好者,相信大家都听说过迭代器与生成器,但是很多同学搞不懂Python迭代器与生成器到底是什么?它们之间又有什么样的关系呢?接下来,小编通过这篇文章为大家介绍一下. 什么 ...

  • Python中tuple和list的区别?基础学习!

    想必大家都知道,Python数据类型有很多种,其中有两个对象的写法非常相似,它就是tuple元组和list列表,让人傻傻分不清楚.那么你知道Python中tuple和list有什么区别吗?我们来看看具 ...

  • Python中classmethod和staticmethod的区别

    今天来写一下装饰器classmethod和staticmethod这两个关键词.一般实现书写类结构体方法有三种,分别是实例方法(instancemethod).classmethod.staticme ...

  • 说说Python中search()和match()的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • Python中深拷贝与浅拷贝的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 【Python面试】 说说Python中xrange和range的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • Python中is与==的使用区别详解

    Python中is与==的使用区别详解

  • Python中Json和dict区别对比?入门分享!

    最近有人问小编说:Python开发中字典和Json的区别是什么?关于这个问题,小编通过下文为大家介绍一下. 什么是字典? 字典是一种数据结构,而json是一种数据格式就会有一些形式上的限制,比如jso ...

  • 一文读懂Python可迭代对象、迭代器和生成器

    IT头条 每日推送最新.最热点的IT界新闻 马化腾回应"腾讯没有梦想"截图系网友PS:天天P图回应<我的前世青年照>涉嫌收集个人隐私:马云称阿里不愿招北大清华毕业生-- ...