概述
python笔记 生成器
好记性不如烂笔头,学习从摘抄开始!
目录
- 生成器格式1:借助列表推导式
- 生成器格式2:借助函数完成
- 生成器 控制 两个任务交替进行
1.通过列表生成式(列表推导式),我们可以直接创建一个 列表。但是,受到内存限制,列表容量肯定是有限的。
2.创建一个包含100万个元素的列表,不仅占用很大的存储空间,
3.如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费。
4.如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
5.这样就不必创建完整的list,从而节省大量的空间。
6.在Python中, 这种边循环一边j计算的机制,称为生成器: generator.
生成器格式1:借助列表推导式
格式:与列表推导式类似,将[]换成了()
<name> = (<表达式> for <变量> in <旧列表>)
<name> = (<表达式> for <变量> in <旧列表> if <条件>)
<name> = (<表达式1> if <条件> else <表达式2> for <变量> in <旧列表>)
注意:当生成的元素超出预设个数时,会抛出异常
例子:name.next() 一次生成一个元素
g = (i * 3 for i in range(30))
print(type(g))
ans = g.__next__()
print(ans)
ans = g.__next__()
print(ans)
ans = g.__next__()
print(ans)
结果:
<class 'generator'>
0
3
6
生成器格式2:借助函数完成
只要函数中出现关键字yield,说明函数变成了生成器
步骤:
1.定义一个函数,函数中使用关键字yield
2.调用函数,接收调用的结果
3.得到的结果就是生成器
4.借助 next(<生成器name>) <生成器name>.next()得到元素
例子1:g.next() 和 next() 一次生成一个元素
def func():
n = 0
while True:
n = n + 1
yield n # yield 相当于return+暂停
print('第{}测试:'.format(n), n)
g = func()
print(type(g))
ans = g.__next__()
print('接收到的返回值:', ans)
ans = g.__next__()
print('接收到的返回值:', ans)
ans = next(g)
print('接收到的返回值:', ans)
ans = next(g)
print('接收到的返回值:', ans)
结果:
<class 'generator'>
接收到的返回值: 1
第1测试: 1
接收到的返回值: 2
第2测试: 2
接收到的返回值: 3
第3测试: 3
接收到的返回值: 4
例子2:name.send() 一次生成一个元素的同时并传入生成器一个参数
第一次调用.send(),必须传入None,
def func():
n = 0
while True:
n = n + 1
temp = yield n # yield 相当于return+暂停 将 n 返回,并接受到的参数赋值给temp
print('第{}测试:'.format(n), temp)
g = func()
print(type(g))
# 第一次调用<name>.send(),必须传入None
ans = g.send(None)
print('接收到的返回值', ans)
# 第二次调用 可以传入其他参数,先执行yield后面的语句,在循环执行到yield
ans = g.send("hello")
print('接收到的返回值', ans)
# 第三次调用 可以传入其他参数,先执行yield后面的语句,在循环执行到yield
ans = g.send("world")
print('接收到的返回值', ans)
结果:
<class 'generator'>
接收到的返回值 1
第1测试: hello
接收到的返回值 2
第2测试: world
接收到的返回值 3
生成器 控制 两个任务交替进行
例子:通过生成器控制两个任务交替进行
def task1():
n=0
while True:
n=n+1
print('任务1第{}次执行'.format(n))
yield None
def task2():
n = 0
while True:
n = n + 1
print('任务2第{}次执行'.format(n))
yield None
g1 = task1()
g2 = task2()
g1.__next__()
g2.__next__()
g1.__next__()
g2.__next__()
g1.__next__()
g2.__next__()
结果:
任务1第1次执行
任务2第1次执行
任务1第2次执行
任务2第2次执行
任务1第3次执行
任务2第3次执行
最后
以上就是昏睡身影为你收集整理的python笔记 生成器的全部内容,希望文章能够帮你解决python笔记 生成器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复