Python生成器的初识

简介: Python生成器的初识

文章目录

🌉一、生成器的概念

🌉二、生成器函数的定义

🎇1、yield和return关键字的区别和相同点

✨(1)yield和return关键字的的不同点:

✨(2)yield和return关键字的的相同点:

🎇2、生成器函数初识

✨(1)什么是生成器函数

✨(2)生成器函数的好处


🌉一、生成器的概念

我们知道的迭代器有两种:一种是调用方法直接返回的,比如for循环就是Python自带的迭代器,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存。避免将大量数据一次性取出而导致的错误和内存不足问题。

如果在某些情况下,我们也需要节省内存,就只能自己写。我们自己写的这个能实现迭代器功能的东西就叫生成器。

简而言之:生成器就是我们自己写的迭代器

🌉二、生成器函数的定义

🎇1、yield和return关键字的区别和相同点

yield是用于生成器。什么是生成器,你可以通俗的认为,在一个函数中,使用了yield来代替return的位置的函数,就是生成器。

  • ✨(1)yield和return关键字的的不同点:

它不同于函数的使用方法是:函数使用return来进行返回值,每调用一次,返回一个新加工好的数据返回给你;yield不同,它会在调用生成器的时候,把数据生成object,然后当你需要用的时候,要用next()方法来取,同时不可逆。你可以通俗的叫它"轮转容器",可用现实的一种实物来理解:水车,先yield来装入数据、产出generator object(你执行了含有yield关键字的函数,之后调用该函数不会的到返回值而是得到一个可迭代的对象"generator object" )使用next()来释放;

好比水车转动后,车轮上的水槽装入水,随着轮子转动,被转到下面的水槽就能将水送入水道中流入田里。水车这个比方太恰当不过了,就是每次有个数据要取出来,先按照顺序将数据放进水车的水槽中,当后面在调用next函数的时候相当于使用水槽的水,并且是按照水车中原来进去的顺序进行取水的(先进先出)

  • ✨(2)yield和return关键字的的相同点:

相同点:都是返回函数执行的结果\
不同点:return 在返回结果后结束函数的运行,而yield 则是让函数变成一个生成器(或者叫做可迭代对象),生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

用一个栗子总结:

def f1():
    return 'aaa'
    return 'bbb'

def f2():
    yield 'aaa'
    yield 'bbb'

print(f1())
print(f2())
for i in f2():
    print(i)

输出结果:
aaa
<generator object f2 at 0x000001731AFFFC10>
aaa
bbb

🎇2、生成器函数初识

  • ✨(1)什么是生成器函数

一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对象的值,就能推动函数的执行,获取新的返回值。直到函数执行结束。

简而言之就是函数内部含有yield关键字的就是生成器函数

  • ✨(2)生成器函数的好处

生成器有什么好处就是不会一下子在内存中生成太多数据,而是你找它要它才给你值,你不向它要它也不会返回值给你。

举个栗子:\
假如我预定了2000000件秋装服,我和工厂一说,工厂应该是先答应下来,然后再去生产,我可以一件一件的要,也可以一批一批的找工厂拿。而不能是一说要生产2000000件衣服,工厂一次性生产2000000件衣服在一起给我,等回来做好了,都冬天了。。。


def produce():
    """生产衣服"""
    for i in range(2000000):
        yield "生产了第%s件衣服"%i

product_g = produce()
print(product_g.__next__()) #要一件衣服
print(product_g.__next__()) #再要一件衣服
print(product_g.__next__()) #再要一件衣服
num = 0
for i in product_g:         #要一批衣服,比如5件
    print(i)
    num +=1
    if num == 5:
        break

#到这里我们找工厂拿了8件衣服,我一共让我的生产函数(也就是produce生成器函数)生产2000000件衣服。
#剩下的还有很多衣服,我们可以一直拿,也可以放着等想拿的时候再拿

相关文章
|
3天前
|
并行计算 开发者 Python
高效利用Python中的生成器提高内存管理
在处理大量数据或执行复杂计算时,内存管理成为关键问题。Python中的生成器(Generators)提供了一种优雅的解决方案,通过惰性计算和节省内存的方式显著提高程序的效率。本文将探讨生成器的基本概念,实际应用场景,以及如何利用生成器优化内存使用和提高程序性能。
|
5天前
|
存储 程序员 数据处理
深入理解Python生成器及其应用
本文将探讨Python生成器的基本概念、工作原理及其在实际编程中的多种应用场景。通过实例解析,帮助读者更好地理解和掌握这一强大的编程工具。
|
24天前
|
算法 搜索推荐 数据处理
|
23天前
|
算法 Python
python函数递归和生成器
python函数递归和生成器
|
2月前
|
存储 Python
Python代码优化使用生成器(Generators)
【7月更文挑战第22天】
42 5
|
1月前
|
大数据 Python
Python理解与实现生成器 (Generators)
Python理解与实现生成器 (Generators)
11 0
|
2月前
|
存储 大数据 数据处理
优化Python中的数据处理效率:使用生成器提升性能
在Python编程中,有效的数据处理是提升性能和效率的关键。本文将探讨如何利用生成器(generator)优化数据处理过程,通过实例展示生成器如何在内存效率和执行速度上带来显著提升。
|
2月前
|
Python
python解包迭代器或生成器
【7月更文挑战第1天】
26 3
|
2月前
|
大数据 数据处理 Python
Python的生成器(Generator)
【7月更文挑战第2天】
28 1
|
3月前
|
数据处理 Python
从零开始学迭代器生成器:打造高效、易读的Python代码
从零开始学迭代器生成器:打造高效、易读的Python代码