首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

A31:高级特性_迭代器与生成器

迭代器(iterators)迭代(Iteration)可被迭代的对象与迭代器生成器 Generatorsyield 返回信息yield 接收信息迭代器(iterators)

迭代器是一个让程序员(特别是列表)的。

任意对象,只要定义了next(Python2) 或者next方法,它就是一个迭代器。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代(Iteration)

当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。

可被迭代的对象与迭代器

迭代器是可以迭代的,但是可被迭代的,不一定就是迭代器了。

例如字符串,列表或元组对象,它们都是可被迭代的,但是它们并不是迭代器。

在解释这个问题,我们需要了解一个python内置函数 ,它允许我们获取一个迭代器的下一个元素

python内置函数 可用于将一个对象转换为迭代器。

迭代器对象可以使用常规for语句进行遍历:

生成器 Generators

在python中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,,只能用于迭代操作,更简单点理解生成器就是一个迭代器。调用生成器,会返回一个迭代器

yield 返回信息

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

下面是一个计算斐波那契数列的生成器:

运行结果:

代码解释:

将会生成一个迭代器对象fibon_it

通过for循环,来迭代一个迭代器对象fibon_it

首次迭代时,代码运行到,返回a的值,即1,打印“1”然后暂停。

第二次迭代时,代码直接从语句后面一行开始执行,运行 后,a=1,b=2。在这个代码中,会因为循环又执行到,返回a的值,此时a依然为1,打印“1”,然后暂停。

第三次迭代时,代码又从语句后面一行开始执行,运行 后,a=2,b=3,返回a的值,即打印“2”,然后暂停

以此类推

yield 接收信息

当生成器的方法被调用时,它会准确地从离开地方继续执行。当生成器的方法被调用时,yield会接收send方法传入的实参,并且从yield暂停的地方开始继续执行。

运行结果如:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810G0XLY500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券