美文网首页
【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