首页 > 编程语言 >python中生成器与迭代器区别

python中生成器与迭代器区别

时间:2023-01-16 12:00:52浏览次数:41  
标签:__ 迭代 python 生成器 list1 yield iter

迭代器

1.该对象需提供next方法,返回迭代器的下一项

2.如果没有下一项即迭代完成时会抛出一个StopIteration异常。

list1 = [1,2,3]
iter1 = iter(list1)
iter2 = iter(list1)
for i in iter1:print("迭代器1:",i)
print("迭代器2",next(iter2))
for i in iter2:print("迭代器2:",i)

 

 总结:

我们for循环列表字典等,并不是真正的for循环列表本身。而是for循环他们返回的一个迭代器对象,这些迭代器对象只能迭代一次

事实上除了for外,sum,min,max函数等内置对象都会使用迭代器协议访问对象。也就是说他们会先调用这些对象中的__iter__方法,如果没有的话则会去找__getitem__方法

生成器

def test_generator(n):
    for i in range(n):
        yield i ** 2
generator1 = test_generator(3)
generator1
next(generator1)

1.生成器本身是一种特殊的迭代器,也就是说生成器就是迭代器。

2.生成器会自动实现迭代器协议,也就是说只要我们yield后,自动就生成了next对象包括StopIteration等结构。

3.生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。生成器不仅“记住”了它的数据状态,生成还记住了程序执行的位置。

二者区别

1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。也就是前者是从有到有的复制,而后者则是从无到有的生成。

2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。

如果到这里还是不太清楚,那我们就再研究深入一点

list1 = list(dir(generator1)) # 生成器所有的方法
list2 = list(dir(iter([1,2,3]))) # 迭代器所有的方法

  

 

标签:__,迭代,python,生成器,list1,yield,iter
From: https://www.cnblogs.com/boye169/p/17055092.html

相关文章

  • 12.函数式语言特性:迭代器与闭包
    一、闭包:能够捕获环境的匿名函数Rust中的闭包是一种可以存入变量或作为参数传递给其他函数的匿名函数。你在可以在一个地方创建闭包,然后在不同的上下文环境中调用该闭包来......
  • python3内置函数
    查看内置函数#方法一dir(__builtins__)#方法二importbuiltinsdir(builtins)数据类型bool:布尔型(True,False)int:整形(整数)float:浮点型(小数)complex:复数......
  • python 排序
    对所有可迭代的对象进行排序操作sort与sorted区别:sort是应用在list上的方法sorted可以对所以可迭代的对象进行排序操作list的sort方法返回的是对已经存在的列表进行......
  • python安装
    1、https://www.python.org/downloads/windows/2、  3、安装过程中一定要勾选addtopath 4、自定义安装,然后可以更改安装路径,其他的复选框都没动过 ......
  • 【笔记】python连接神通数据库
    python连接国产神州通用数据库。一、准备下载whl及dll:链接:https://pan.baidu.com/s/1lwE-FwIsf-aYjoqCPij2hA提取码:49qp二、安装 目录如上。1、aci.dll加入......
  • python super 参数问题
    ​​Python’ssuper()consideredsuper!​python3中super()参数意义和用法super().init()#等同于super(A,self).init()classA(Base):def__init__(self):......
  • python filter
    a=[1,2,3,4,5,6]b=filter(lambdax:x%2==1,a)print(list(b))[1,3,5]......
  • OrderedDict python有序字典
    importcollectionsd1=collections.OrderedDict()d1['b']='B'd1['a']='A'd1['c']='C'd1['2']='2'd1['1']='1'#OrderedDict([('b','B......
  • python和C++调用动态库
    python和C++调用动态库python和C++相互调用动态库的方法有4种:python调用C/C++编译的动态库python调用python编译的动态库C/C++调用python编译的动态库C/C++调用C/C++......
  • python—web自动化(4)—测试框架之unittest2使用
    学习目标:自动化测试框架搭建需求分解:unittest2测试用例BaseTestCase:封装测试用例中相同的部分数据驱动测试(ddt):测试数据与操作分离生成测试报告:......