首页 > 编程语言 > 详细

python基础-生成器(一)

时间:2020-11-28 21:13:17      阅读:33      评论:0      收藏:0      [点我收藏+]

生成器:一边循环一边计算的机制,称为生成器.

两种表现形式:

1.生成器表达式,列表解析的形式,只要把一个列表生成式的[]改成(),就创建了一个generator:

s1 = [i for i in range(10)]  # 列表
print(s1)
s2 = (i for i in range(10))  # 生成器
print(s2)
print(s2.__next__())
print(s2.__next__())
print(s2.__next__())

技术分享图片

 

 

2.生成器函数;和常规的函数一样,只是不用return而使用yield。yield相当于return,但功能有所差异,其一,yield一次返回一个结果,并挂起函数,下一次调用(用next或__next__)从上一次挂起的位置继续运行

.send() 和next()一样,都能让生成器继续往下走一步(下次遇到yield停),但send()能传一个值,这个值作为yield表达式整体的结果

def test():
    yield 1
    yield 2

print(test())  # 直接写函数名并不会运行函数,而是返回一个生成器
a = test() #函数赋值给变量才会保持状态
print(a.__next__())
print(a.__next__())

技术分享图片

 生长器函数的特点:需要才调用next,不需要不调用,内存不会卡

列表解析的形式

l=[1,2,3,4,]
print(sum(l))#一次性加载,耗内存,卡死
print(sum(i for i in range(50000000000000000000000)))#需要才加载next,不会卡

函数形式

import time
def test():
    print(开始生孩子了)
    print(开始生孩子了)
    yield 
    print(开始生孩子了)
    yield 儿子
    print(开始生孩子了)
    yield 孙子
res=test()
time.sleep(1)
print(res.__next__())
time.sleep(1)

技术分享图片

 

生成器特点:

1是可迭代对象

2实现了延迟计算,省内存

3生成器比其他可迭代对象多了个延迟计算,节省内存的好处。

python基础-生成器(一)

原文:https://www.cnblogs.com/liaoyifu/p/14052900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!