Python编程:generator生成器

简介: Python编程:generator生成器

列表生成器

# 列表生成式
lst = []
for i in range(10):
    lst.append(i * 2)
print(lst)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 相当于:
lst = [i * 2 for i in range(10)]
print(lst)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 列表生成器:循环迭代,推断下一元素
lst = (i * 2 for i in range(10))
print(lst)
# <generator object <genexpr> at 0x0000000004200CF0>
"""生成器:
只用调用是才会生成相应的数据
只记录当前位置
只有一个__next__()
"""

yield生成器

# 菲波那切数列Fibonacci
def fib(max):  # 此时不能叫函数,应该叫生成器
    n = 0
    a, b = 0, 1
    while n < max:
        yield b  # 返回当前值,并保存当前状态
        a, b = b, a+b  # 同时赋值
        n = n+ 1
    return "异常消息"  # 输出异常信息
f = fib(10)
print("===")
print(f.__next__())  # 下一个值
print("===")
print(f.__next__())
print("==start loop==")
# for i in f:
#     print(i)
while True:
    try:
        g = next(f)
        print(g)
    except StopIteration as e:
        print("value of e :", e.value)
        break
"""OUT:
===
1
===
1
==start loop==
2
3
5
8
13
21
34
55
value of e : 异常消息
"""

yield生成器-协程

import time
def consumer(name):  # 消费者
    print("%s 来吃包子了!" % name)
    while True:
        baozi = yield
        print("%s 吃了第 %s 个包子" % (name, baozi))
def producer():  #  生产者
    a = consumer("A")  #初始化一个生成器
    b = consumer("B")
    a.__next__()  #程序走到第一个yield
    b.__next__()
    print("我要开始做包子了")
    for i in range(10):
        time.sleep(1)
        print("第 %s 个包子" % i)
        a.send(i)  # 将数据发送到 yield 位置,并执行一次next
        b.send(i)
producer()
# consumer("a")
"""
A 来吃包子了!
B 来吃包子了!
我要开始做包子了
第 0 个包子
A 吃了第 0 个包子
B 吃了第 0 个包子
第 1 个包子
A 吃了第 1 个包子
B 吃了第 1 个包子
第 2 个包子
A 吃了第 2 个包子
B 吃了第 2 个包子
第 3 个包子
A 吃了第 3 个包子
B 吃了第 3 个包子
第 4 个包子
A 吃了第 4 个包子
B 吃了第 4 个包子
第 5 个包子
A 吃了第 5 个包子
B 吃了第 5 个包子
第 6 个包子
A 吃了第 6 个包子
B 吃了第 6 个包子
第 7 个包子
A 吃了第 7 个包子
B 吃了第 7 个包子
第 8 个包子
A 吃了第 8 个包子
B 吃了第 8 个包子
第 9 个包子
A 吃了第 9 个包子
B 吃了第 9 个包子
"""
相关文章
|
5月前
|
Python
Python 的异步编程:什么是协程(Coroutine)和生成器(Generator)之间的区别?
Python 的异步编程:什么是协程(Coroutine)和生成器(Generator)之间的区别?
|
11月前
|
Python
【Python】创建生成器generator
【Python】创建生成器generator
37 0
|
11月前
|
Python
Python基础 | 你应该掌握的generator (一)
Python基础 | 你应该掌握的generator (一)
48 0
|
12月前
|
机器学习/深度学习 算法 Python
python中生成器generator
python中生成器generator
|
算法 Python
python入门-----生成器generator
python入门-----生成器generator
python入门-----生成器generator
|
Python
Python编程:generator生成器
Python编程:generator生成器
|
算法 Python
【Python高级语法】——生成器(generator)
⽣成器是这样⼀个函数,它记住上⼀次返回时在函数体中的位置。对⽣成器函数的第⼆次(或第 n 次)调⽤跳转⾄该函数中间,⽽上次调⽤的所有局部变量都保持不变。 ⽣成器不仅记住了它数据状态;⽣成器还记住了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。
120 0
【Python高级语法】——生成器(generator)
|
算法 Python
Python 高级特性(4)- 生成器 generator
Python 高级特性(4)- 生成器 generator
194 0
Python 高级特性(4)- 生成器 generator
|
Python
Python3快速入门——(9)生成器 (generator)
生成器 (generator) #生成器generator 在Python中,这种一边循环一边计算的机制,称为生成器,能节省大量的空间 L=[x*x for x in range(1,11)] g=(x*x fo...
1394 0