入门理解python中的generator - 生成器

生成器 Generator 的定义

生成器(Generator)是一种特殊的函数,可以用于迭代地生成一系列值,而不需要一次性生成所有值并将它们存储在内存中。生成器在需要时逐个生成值,并在生成值后暂停执行,保留函数的状态,以便下次调用时能够从停止的地方继续执行。

生成器函数使用 yield 语句来定义,而不是常规函数中的 return 语句。当生成器函数被调用时,它返回一个生成器对象,而不是立即执行函数体。每次调用生成器对象的 next() 方法时,生成器函数将从上次执行停止的位置继续执行,直到遇到下一个 yield 语句。生成器通过生成一个值并将其返回给调用者来实现迭代。



什么是Python的生成器 Generator

上面的定义 过于官方, 理解有点困难。

通俗地讲,

  1. 生成器就是一种特别的迭代器(iterator)。
  2. 生成器的大部分使用方法是跟迭代器一样的
  3. 生成器代码更简洁, 而且具有临时修改当前元素的功能



一个简单的生成器例子

直接看代码:

def gen(num):
    while num > 0:
        yield num # return num to next() and pause the function
        num -= 1
    return # raise StopIteration


g = gen(5) # g is a generator object

print(next(g)) # 5
print(next(g)) # 4
print(next(g)) # 3

for i in g:
    print(i) # 2 1
简单代码解释

1 到 5 行是 定义1个 生成器函数 gen()

第8行是基于生成器函数 定义了 了1个生成器对象 g

之后下面的代码就是可以把 g 当成iterator 来使用了, 遍历它的元素。



初步理解生成器函数

首先, 生成器 与 迭代器 1个明显的区别是, 迭代器是用类来定义的, 迭代器器的对象必须实现__next__ 函数
而且生成器是用 函数来定义的, 而里面的关键字就是 yield

一旦python 中某个函数 写入了 yield 这个关键字, 则代表python 不会把这个函数当作普通函数, 而且1个种特别的函数 - 生成器函数
生成器的函数的
yield 可以理解为return 返回1个值
而生成器最后的return 可不是普通 函数 return的意思, 实际是代表 raise StopIteration, 没有后面的元素的了的意思。



初步理解生成器对象

我们再看看上面例子的第8行

def gen(num):
    while num > 0:
        yield num # return num to next() and pause the function
        num -= 1
    return # raise StopIteration


g = gen(5)

g = gen(5) 如果按照一般函数的思维 g 肯定是 gen() 的返回值, 由于gen()里的return 后面是吉的, 所以 g = None 吗?

实际上, 由于gen() 里面包含关键字yield, 所以它是1个生成器函数, 所以执行这g = gen(5) 时, 实际上gen()里面的代码一句都还没开始执行。

而且上面说了, gen() 里面的return 并不是真正的return

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值