码迷,mamicode.com
首页 > 编程语言 > 详细

Python 之生成器

时间:2019-05-11 23:21:00      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:pre   send   nbsp   range   获取   int   start   code   --   

# 注意:yield的作用是第一次执行生成器时程序停在yield所在行,并返回yield后的值。
# 第二次执行生成器时,程序会在第一次停止的位置执行 ,以此类推。。。
# send(None) 相当于 第一次 next()的效果

# 斐波那契数列
def create_num():
    print("----start----")
    i, j = 0, 1
    for k in range(5):
        yield j
        i, j = j, i + j
    print("----end----")

def test():
    i = 0
    while i < 5:
        temp = yield i
        print(temp)
        i += 1

if __name__ == "__main__":
    a = [x for x in range(10)]
    print(a)
    # 如果数据比较多时,就比较占用内存了,所以可以采用生成器

    # 生成器的创建方式一
    b = (x for x in range(10))
    print(b)  # <generator object <genexpr> at 0x007AAEB0>
    # 获取数据,第二个参数是指定获取对应位置的值
    print(next(b, 1))  # 0
    print(next(b, 2))  # 1
    print(next(b, 3))  # 2
    # 注意:如果第二个参数不填,则每执行一次,就获取下一个, 如下:
    print(next(b))  # 3
    print(next(b))  # 4
    print(next(b))  # 5

    # 生成器创建方式二:在函数内部使用了yield关键字
    create = create_num()
    print(create)  # <generator object creat_num at 0x0077AE70>
    print(next(create)) # 1
    print(next(create)) # 1
    print(next(create)) # 2
    print(create.__next__())
    # 遍历生成器
    ‘‘‘
    ----start----
    1
    1
    2
    3
    5
    ----end----
    ‘‘‘
    for num in create:
        print(num)

    # 生成器之send的用法
    ‘‘‘
    0
    haha
    None
    2
    ‘‘‘
    test = test()
    print(test.__next__())
    test.send("haha") # 将haha赋给temp
    print(test.__next__())

 

Python 之生成器

标签:pre   send   nbsp   range   获取   int   start   code   --   

原文地址:https://www.cnblogs.com/yang-2018/p/10850331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!