美文网首页
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 笔记 - 生成器

    1. 什么是生成器 生成器就是迭代器,迭代器不一定是生成器 2. 生成器怎么生产元素 调用一个带有yield的关键...

  • 01.07 笔记 - 递归

    递归;实际开发的时候,能不用就不用 1.什么是递归函数 在函数中调用函数本身的函数就是递归函数 2.递归的作用:循...

  • 01.07 笔记 - 模块

    1.什么是模块 在python中一个py文件就是一个模块,模块也有封装效果 a.系统模块(标准库) - pytho...

  • 理财日记(2021)

    2021.01.07 .01.07

  • 01.07 笔记 - 迭代器

    1. 什么是迭代器(iter) 是python提供的容器类型数据类型。 获取迭代器的元素只能从前往后一个一个的取,...

  • Python笔记003-生成器和生成器表达式

    Python笔记003-生成器和生成器表达式 以下是我学习《流畅的Python》后的个人笔记,现在拿出来和大家共享...

  • 01.07

    每次都说改变 从新开始 却总是半途而废 希望这次可以真的改变 从新开始 早安 加油 再深的感情也抵挡不住缘...

  • 01.07

    缺了两天的更文,确切的说其实是写日记!简单说明一下,01.05上了一整天班,新病人来了,中午安排手术,下午做...

  • 01.07

    颞叶 颞上回,颞中回,颞下回,颞横回,海马海马旁回杏仁核 感觉性失语,命名性失语,听觉障碍,精神记忆行为,癫痫 胃...

  • 01.07

    努力努力再努力

网友评论

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

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