Python生成器

简介: Python生成器
+关注继续查看

1 生成器

根据程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成处理,而是使用一个,再生成一个,可以节约大量的内存。

两种方式创建生成器

  1. 生成器推导式
  1. yield 关键字

2 生成器推导式方式创建生成器:

  • 与列表推导式类似,只不过生成器推导式使用小括号
# 创建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)

# next获取生成器下一个值
# value = next(my_generator)
# print(value)

# 遍历生成器
for value in my_generator:
    print(value)

执行结果:

<generator object <genexpr> at 0x000001AF8E9C9510>
0
2
4
6
8

说明:

  • 获取生成器下一个值得方法是调用next()
  • 实际上是一个迭代器,因此可用for循环获取生成器值

3 yield 关键字创建生成器:

  • 只要在def函数里面看到有 yield 关键字那么就是生成器
def my_g():
    for i in range(3):
        yield i


for i in my_g():
    print(i)

执行结果:

0
1
2
Process finished with exit code 0

说明:

  • 获取下一个值时,会执行for循环到yield这一行,返回yield后面得值,并阻塞在这一行,获取下一个值时继续往下执行
  • 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常
  • for 循环内部自动处理了停止迭代异常,相对于while语句,使用起来更加方便

4 斐波拉契数列(Fibonacci)使用生成器生成

def fibonacci(num):
    a = 0
    b = 1
    # 记录生成fibonacci数字的下标
    current_index = 0
    while current_index < num:
        result = a
        a, b = b, a + b
        current_index += 1
        # 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
        yield result


fib = fibonacci(5)
# 遍历生成的数据
for value in fib:
    print(value)

执行结果:

0
1
1
2
3

Process finished with exit code 0

5 生成器的send方法

generator.send(value)

恢复执行并向生成器函数“发送”一个值。 value 参数将成为当前 yield 表达式的结果。 send() 方法会返回生成器所产生的下一个值,或者如果生成器没有产生下一个值就退出则会引发 StopIteration。 当调用 send() 来启动生成器时,它必须以 None 作为调用参数,因为这时没有可以接收值的 yield 表达式。

def test():
    for i in range(5):
        sig = yield i
        print('send by:', sig)
 
 
a = test()
 
print(a.__next__()) # 运行生成器,在yield处停止
print(a.send('a'))  # 将“a”传递给sig变量,并在下一个yield处停止,返回1
print(a.send('b'))  # 将“b”传递给sig变量,并在下一个yield处停止,返回2
print(a.__next__()) #

执行结果:

0
send by: a
1
send by: b
2
send by: None
3


目录
相关文章
|
1天前
|
存储 大数据 索引
讲解Python的迭代器和生成器。
讲解Python的迭代器和生成器。
|
6天前
|
Python
Python 教程之控制流(17)生成器表达式
Python 教程之控制流(17)生成器表达式
10 0
|
6天前
|
数据处理 Python
Python 教程之控制流(16)生成器
Python 教程之控制流(16)生成器
7 0
|
17天前
|
存储 大数据 Python
Python中的生成器(Generators):懒加载和高效迭代的利器
在Python编程中,生成器(Generators)是一种强大的工具,它允许你按需生成值,而不是一次性产生整个序列。生成器的懒加载特性使得它们在处理大数据集或需要节省内存的情况下非常有用。本文将深入探讨生成器的概念、创建方法以及它们的应用场景。
|
1月前
|
算法 Python
85 python高级 - 生成器
85 python高级 - 生成器
10 0
|
2月前
|
前端开发 测试技术 Linux
芯片人的快乐——python+systemverilog用波形祝你新春快乐 |献上祝福语波形生成器|
芯片人的快乐——python+systemverilog用波形祝你新春快乐 |献上祝福语波形生成器|
|
2月前
|
数据处理 Python
Python学习:迭代器与生成器的深入解析
Python学习:迭代器与生成器的深入解析
13 0
|
3月前
|
存储 算法 数据处理
Python生成器深度解析:构建强大的数据处理管道
Python生成器深度解析:构建强大的数据处理管道
264 0
|
3月前
|
Python
Python进阶之路:如何高效地使用生成器
Python进阶之路:如何高效地使用生成器
|
4月前
|
算法 Python
【从零学习python 】60.探索生成器:迭代的灵活利器
【从零学习python 】60.探索生成器:迭代的灵活利器
27 0
相关产品
云迁移中心
推荐文章
更多