首页 > 其他分享 >迭代器和生成器

迭代器和生成器

时间:2023-06-02 15:13:05浏览次数:44  
标签:__ .__ 迭代 生成器 iter next print

一、迭代器(Iterator)

1、可迭代对象(Iterable)

存储了元素的一个容器对象,且容器中的元素可以通过“__iter__( )”方法或“__getitem__( )”方法访问。可迭代对象不能独立进行迭代,可通过“for…in”遍历来完成

2、常见的可迭代对象

字符串、列表、元组、字典、集合、文件

3、迭代器对象

可迭代对象调用__iter__( )方法成为迭代器对象,迭代器对象是可以记住遍历的位置的对象。

4、迭代器特性

  1. 迭代器对象可以使用iter()函数来创建。

  2. 迭代器对象可以使用next()函数来访问容器中的元素。

  3. 当迭代器对象遍历完容器中的元素时,它将引发StopIteration异常。

  4. 可以使用for循环来遍历迭代器对象,因为for循环自动处理了StopIteration异常。

  5. 迭代器对象在遍历过程中只能向前移动,不能后退或重置。

  6. 迭代器对象可以被多个迭代器同时使用,每个迭代器都会维护自己的迭代状态。

  7. 生成器对象是一种特殊的迭代器,它们可以使用yield语句来定义。

  8. 迭代器对象可以用于惰性计算,即只有在需要时才计算下一个元素,从而节省内存和计算资源。

  9. 迭代器其实是一种不依赖于索引取值的方式!

5、易混淆

ll = [1, 2, 3, 4]

# StopIteration 当数据被取值完的时候,如果在次next会直接报错
res = ll.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())  

# 取出来的值都是 1,因为每次打印都调用的ll.__iter__方法,数据被重置
print(ll.__iter__().__next__()) # 1
print(ll.__iter__().__next__()) # 1
print(ll.__iter__().__next__()) # 1
print(ll.__iter__().__next__()) # 1

 

 

 

 

 

二、生成器

 

 

 

 

三、异常捕获

 

标签:__,.__,迭代,生成器,iter,next,print
From: https://www.cnblogs.com/dgp-zjz/p/17451770.html

相关文章

  • Collection集合的遍历方式一:迭代器
        ......
  • GBDT(MART) 迭代决策树入门教程 | 简介
    GBDT(MART)迭代决策树入门教程|简介 在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下:        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结......
  • 生成器generator
    1,用于协程,最近(2023/6/1)开始看到生成器用于协程这方面的内容,但还没接触,开始有所了解。 如果列表元素可以按照某种算法推算出来,那我们因此可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:g......
  • 迭代器与异步迭代器
    迭代器classReader(object):"""自定义异步迭代器(同时也是异步可迭代对象)"""def__init__(self):self.count=0defreadline(self):#awaitasyncio.sleep(1)self.count+=1ifself.count==100:......
  • 迭代加深搜索与埃及分数求解
    迭代加深搜索,实质上是限定下界的深度优先搜索。即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后重复以上步骤搜索,直到搜索到可行解。在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个深度约束逐次加1,直到搜索到目标为止。这样可以看出重复搜索了好多。但是它的好处在于:......
  • Mybatis-plus关于代码生成器的使用
    1、添加依赖 2、在test包下创建一个CodeGet类,实现生成代码的功能。注意:全局配置、数据源配置一定要和自己的电脑配置一致! 3、执行CodeGet类中的main方法。打印台有如下图提示字样,即自动生成成功。 4、对比两张图。在wechat文件夹下有controller、entity、mapper、s......
  • dfs 二叉树中序遍历迭代解法——求解BST中第k小元素
    BST中第K小的元素中文English给一棵二叉搜索树,写一个 KthSmallest 函数来找到其中第K小的元素。Example样例1:输入:{1,#,2},2输出:2解释: 1 \ 2第二小的元素是2。样例2:输入:{2,1,3},1输出:1解释:2/\13第一小的元素是1。Challenge如果这棵BST经常会被修改(......
  • 被用到炉火纯清的迭代器模式
    0x01:迭代器模式简介Java中可以说已经把迭代器模式用到了极致,每一个集合类都关联了一个迭代器类Iterator。迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。UML类图如下:其中,Aggregate是聚集抽象类,负责提供创建具体迭代器角色的接口;Iter......
  • 灵感生成器DreamGPT开源:见识一下真正的脑洞大开
    ChatGPT最为人诟病的缺陷就是「胡编乱造」了,可以一本正经地讲一段林黛玉倒拔垂杨柳的故事。  对于真正想了解「林黛玉」或「倒拔垂杨柳」的人来说,这段回答可以说是灾难级误导了,但对于专注于「虚构」和「创意」的从业者来说,天马行空幻觉反而可以激发创造力。 最近Diverge......
  • 斐波那契数列:2.迭代法
    斐波那契数列:2.迭代法#include<stdio.h>intfib(intm){if(m==1||m==2){return1;}inta=1,b=1,aw=0;while(m>=2){aw=aw+a;a=b;b=aw;m=m-1;}returnaw;}intmain(){intn;scanf("%d",&n);p......