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

可迭代、迭代器、生成器

时间:2023-10-01 20:12:19浏览次数:26  
标签:__ 迭代 Generator 生成器 now 方法

可迭代

可以通过 isinstance(object, Itreable) 判断

也可以通过如下方式判断

  1. dir() 方法,如果有实现 __iter__ 就说明是可迭代的
  2. 当然也可能只是闲了 __getitem__ 方法,尝试按顺序获取元素,也不会抛出异常

因此,我们可以通过能不能用 for 去迭代或者使用 iter() 来尝试生成迭代器来测试是不是可迭代的。

迭代器都是可迭代的

迭代器

迭代器不可以用 for 来迭获取元素,但是实现了 __next__ 方法。可以使用 next(object) 来获取元素。

生成器

相比大家都见过这样的代码

L = (x * x for x in range(1000000)) # Generator
R = [x * x for x in range(1000000)] # List

def func(n):
    now = 0
    while (now < n):
        yield now
        now += 1

gen = func(10000) # Generator

那么这个是什么呢,就是 Generator (废话)。那么它的优越性是什么,我们为什么要使用 Generator 呢?

在研究这个问题之前,我们可以先使用 getsizeof() 方法来看一下 GeneratorList 所占用的空间。

答案就显而易见了,至少 Generator 更加节省空间。对于是否节省时间,笔者并不是很清楚,留给读者可以自己尝试一下。

由于生成器并不是一次产生所有的元素,而是一次一次地生成然后返回,那么我们只需要不断调用生成器就可以获得元素。

那么方法有两种

  • 使用 next() 方法
  • 使用 generator.send() 方法

两种方法是等价的,笔者可以自行尝试。
当然 generator.send() 更有其他用处,不过不是本篇文章讨论的内容,就不多做赘述。

标签:__,迭代,Generator,生成器,now,方法
From: https://www.cnblogs.com/Gensokyo-Alice/p/17739203.html

相关文章

  • 免费 AI 代码生成器 Amazon CodeWhisperer 初体验
    文章作者:浪里行舟简介随着ChatGPT的到来,不由让很多程序员感到恐慌。虽然我们阻止不了AI时代到来,但是我们可以跟随AI的脚步,近期我发现了一个神仙AI代码生产工具CodeWhisperer,它是一项基于机器学习的服务,其根据自然语言注释和集成开发环境(IDE)中的代码,生成代码建议,帮助......
  • java实现迭代器模式
    迭代器模式(IteratorPattern)是一种行为型设计模式,它提供一种方法来顺序访问一个聚合对象(如列表、集合、数组等)中的元素,而不暴露聚合对象的内部表示。迭代器模式通常包括以下角色:迭代器(Iterator)、具体迭代器(ConcreteIterator)、聚合(Aggregate)、具体聚合(ConcreteAggregate)。以下是一......
  • Flutter/Dart第03天:Dart可迭代集合
    Dart官网代码实验室:https://dart.dev/codelabs/iterables重要说明:本博客基于Dart官网代码实验室,但并不是简单的对官网文章进行翻译,我会根据个人研发经验,在覆盖官网文章核心内容情况下,加入自己的一些扩展问题和问题演示和总结,包括名称解释、使用场景说明、代码样例覆盖等。可迭代......
  • 软件设计模式系列之十八——迭代器模式
    1模式的定义迭代器模式是一种行为型设计模式,它允许客户端逐个访问一个聚合对象中的元素,而不暴露该对象的内部表示。迭代器模式提供了一种统一的方式来遍历不同类型的集合,使客户端代码更加简洁和可复用。2举例说明为了更好地理解迭代器模式,让我们考虑一个简单的例子:一个图书馆......
  • 结对项目-Java实现四则运算题目生成器
    软件工程21级计科1班作业要求结对项目作业目标了解结对合作开发流程,提高合作开发效率项目成员姓名学号江卓颖3121004699詹慧丹3221004855Github地址github仓库链接PSP表PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗......
  • 小学四则运算题目生成器
    这个作业属于哪个课程软件工程这个作业要求在哪里在这里这个作业的目标写个小学四则运算题目生成器,学会与同伴合作做项目陈威衡3121005206郑贵南3121005237github连接需求分析表达式中的分数都用真分数的形式表示生成的表达式里只包含四则运算和括号每......
  • Biwen.QuickApi代码生成器功能上线
    [QuickApi("hello/world")]publicclassMyApi:BaseQuickApi<Req,Rsp>{}使用方式:dotnetaddpackageBiwen.QuickApidotnetaddpackageBiwen.QuickApi.SourceGenerator最后简简单单注册路由:app.MapGenQuickApis("api");Biwen.QuickApi使用REPR......
  • Java函数AI生成器:秒级体验,高质量生成
    职业使然,之前我自己试用并给小伙伴们推荐过不少大模型相关的产品,这些产品看起来牛逼plus,但是它们要么对国内有限制,要么是申请制/邀请制,自己没个资想搞个账号去体验一下都难如登天,忍不住吐槽某大厂虽然早早的对外宣布面向全民开发,但实际上提交了手机号码还在等待排队上车,掐指一算,有......
  • Java实现四则运算生成器
    这个作业属于哪个课程计科二班这个作业要求在哪里结对项目这个作业的目标熟悉结对编程项目成员龙新超3121004921github链接:龙新超github艾孜海尔江3121004900github链接:海尔江githubPSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实......
  • Python高频面试题——生成器(最通俗的讲解)
    生成器定义在Python中,使用了yield的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在......