美文网首页
【11】迭代器与生成器

【11】迭代器与生成器

作者: Z_JoonGi | 来源:发表于2019-03-19 12:30 被阅读0次

    1.什么是迭代器(iter)

    • 迭代器是python提供的容器型数据类型。 (可变,有序)
    • 和字典、集合、元祖等容器型数据类型不一样,它只能查看元素,而且看一个对于迭代器来说,里面的元素就少一个
    • 迭代器的值:
    a.将其他的数据转换成迭代器
    iter1 = iter()
    

    迭代器的元素:任何类型的数据都可以,可以重复。

    b.生成器

    2.查 - 获取元素的值

    注意:不管以任何形式获取了迭代器中某个元素的值,这个元素会消失。
    a.获取单个元素
    #1
    next(迭代器)
    #2
    迭代器.__next__()
    

    返回容器中最上面的元素

    b.遍历取出迭代器中的每个元素
    iter3 = iter('abcd')
    for item in iter3:
        print(item)
    

    3.什么时候使用迭代器

    多个数据中,某些数据使用过了,不需要再保存时。

    4.什么是生成器

    • 在 Python 中,使用了 yield 的函数被称为生成器(generator)。
    • 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
    • 调用一个生成器函数,返回的是一个迭代器对象。

    5.生成器怎么产生数据

    • 一个生成器能够产生多少个数据,就看执行完生成器对应的函数体会遇到几次 yield 关键字
    • 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
    • 当执行到函数体结束没有遇到yield,则会报错 #StopIteration

    练习: 写一个生成器,能够产生'stuXXXX'的学号, stu0000-stu9999

    def stu_gen():
        stu = 0
        while True:
            if stu < 10000:
                str1 = 'stu'+str(stu).zfill(4)
                stu +=1
                yield str1
    
    
    s = stu_gen()
    for _ in range(20):
        print(next(s))
    
    - 注意:yield后面可以加多个数值(可以是任意类型),但返回的值是元组类型的。

    6.生成式

    生成式是生成器的另一种写法(简写)

    a.语法1

    生成器 = (表达式 for 变量 in 序列)
    列表变量 = [表达式 for 变量 in 序列]

    b.说明:

    可以是值、变量、运算表达式、函数调用表达式等,只要不是赋值语句都可以

    c.展开
    def  函数名():
        for 变量 in 序列:
            yield 表达式
    
    a.语法2

    生成器 = (表达式 for 变量 in 序列 if 条件语句)
    列表变量 = [表达式 for 变量 in 序列 if 条件语句]

    b.展开
    def  函数名():
        for 变量 in 序列:
              if 条件语句
                  yield 表达式
    

    结果是生成器

    gen1 = [(x, x*2) for x in range(10) if x % 2]
    

    结果是列表

    gen1 = [(x, x*2) for x in range(10) if x % 2]
    

    补充:三目运算符

    C中的三目运算符:表达式?值1:值2
    python的三目运算操作: 值1 if 表达式 else 值2

    相关文章

      网友评论

          本文标题:【11】迭代器与生成器

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