美文网首页
01.07 笔记 - 生成器

01.07 笔记 - 生成器

作者: xxxQinli | 来源:发表于2019-01-07 18:11 被阅读0次

    1. 什么是生成器

    • 生成器就是迭代器,迭代器不一定是生成器

    2. 生成器怎么生产元素

    • 调用一个带有yield的关键字的函数就能得到一个生成器

    • 不带yield的函数:调用的时候会执行函数体,并且获取返回值

    • 带yield的函数,调用的时候,不会执行函数体,也不会获取返回值,而是产生一个生成器(函数表达式就是一个生成器)

    • 这个生成器中的元素就是yield关键字后面的值

    • 只要有yield,不管yield出现在哪里,并且是否能执行到,都会将函数变成一个生成器

    3. 获取生成器的元素

    • 生成器中的元素也是通过next或者for-in

    • 生成器获取元素,实质就是去执行生成器对应的函数,每次执行到yield为止,并且会将yield后面的值作为当次获取到的元素

    • 下次获取元素的时候,会接着上次结束的位置往后执行,知道下一个yield为止....

    • 以此类推,直到函数结束,如果执行到函数结束没有遇到yield,,那么就会报错

    • 若yield后面还有代码,会继续往后面执行,直到遇到下一个yield,若没有yield,会报错

    • 函数中,有几个yield,就会有几个元素

    • 每次执行都是执行上一个yield到本次yield之间的代码,并返回本次yield的值

    4. 什么时候要用生成器

    • 例如产生学号
    def func3():
        print('~~~~~')
        yield 100, 200, 300
        print('!!!!!!')
        yield 400
        print('*******')
        yield 500
    
    gen1 = func3() 
    print('') 
    print(gen1)
    print(next(gen1))
    print(next(gen1))
    print(next(gen1))
    print('') 
    
    
    def creat_num():
        num = 1
        while True:
            yield 'py1809%d' % num
            num += 1
    
    num_gen = creat_num()
    for _ in range(10):
        print(next(num_gen))
    
    print(next(num_gen))
    
    def my_iter(iterable):
        for i in iterable:
            yield i
    
    
    a = my_iter([1, 2, 3])
    print(next(a))
    print(next(a))
    print(next(a))
    
    

    相关文章

      网友评论

          本文标题:01.07 笔记 - 生成器

          本文链接:https://www.haomeiwen.com/subject/vvhprqtx.html