博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成器
阅读量:4654 次
发布时间:2019-06-09

本文共 1785 字,大约阅读时间需要 5 分钟。

重要:yield的作用,类似于next(),执行一次yield,程序就准备输出下一行,会保存函数执行进度 (yield 相当于print,若yield迭代器要输出的话,一般用for循环输出)

def odd():    print('step 1')    yield 1    print('step 2')    yield(3)    print('step 3')    yield(5)#============================================>>> o = odd()>>> next(o)step 11>>> next(o)step 23>>> next(o)step 35>>> next(o)Traceback (most recent call last):  File "
", line 1, in
StopIteration

 

 


通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

#生成杨辉三角# 期待输出:# [1]# [1, 1]# [1, 2, 1]# [1, 3, 3, 1]# [1, 4, 6, 4, 1]# [1, 5, 10, 10, 5, 1]# [1, 6, 15, 20, 15, 6, 1]# [1, 7, 21, 35, 35, 21, 7, 1]# [1, 8, 28, 56, 70, 56, 28, 8, 1]# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

方法一:

def triangles():    listt = [1]    while True:        yield listt        listt.append(0)        listt = [listt[i-1]+listt[i] for i in range(len(listt))]t = triangles()for i in range(10):    print(next(t))#==========================================[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1][1, 5, 10, 10, 5, 1][1, 6, 15, 20, 15, 6, 1][1, 7, 21, 35, 35, 21, 7, 1][1, 8, 28, 56, 70, 56, 28, 8, 1][1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

 

方法二:

def triangles():    listt = [1]    while True:        yield listt        listt = [sum(i) for i in zip([0]+listt,listt+[0])]  t = triangles()for i in range(10):    print(next(t))#===========================================[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1][1, 5, 10, 10, 5, 1][1, 6, 15, 20, 15, 6, 1][1, 7, 21, 35, 35, 21, 7, 1][1, 8, 28, 56, 70, 56, 28, 8, 1][1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

 

 

 

 

 

 

 

 

dd

 

转载于:https://www.cnblogs.com/hanggegege/p/5796036.html

你可能感兴趣的文章
stm32——modbus例程网址收藏
查看>>
vscode+TCC快捷编译c语言
查看>>
FreeRTOS 任务栈大小确定及其溢出检测
查看>>
FreeRTOS任务优先级说明
查看>>
单片机的栈
查看>>
IAR astyle代码美化
查看>>
推荐一些网站给大家
查看>>
单向可控硅(SCR)双向可控硅(TRIAC)
查看>>
再论i++ ++i
查看>>
表达式* ptr ++和++ * ptr是否相同?
查看>>
c语言中的数据变量类型,大小
查看>>
C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思
查看>>
正则表达式,删除空行,删除特定字符所在行
查看>>
IAR平台移植TI OSAL到STC8A8K64S4A12单片机中
查看>>
c语言定义的几种易错的说明
查看>>
Socket网络编程(TCP/IP/端口/类)和实例
查看>>
实时系统概念
查看>>
理一理字节对齐的那些事
查看>>
#pragma pack(push,1)与#pragma pack(1)的区别(转)
查看>>
socket、端口、进程的关系
查看>>