【11】迭代器与生成器
2019-03-19 本文已影响0人
Z_JoonGi
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