一. 迭代
1. 枚举:enumerate #把一个 list 变成索引元素对
2. 迭代 #通过collections模块的Iterable类型判断
注:可迭代便可使用for循环遍历,但生成器只能遍历一次
二. 列表生成式
1. for循环
2. 列表生成式
eg1:
- 生成100以内所有偶数的平方;
- 生成‘ABC’与‘123’的全排列;
- 列出当前目录下的所有文件和目录名;
eg2:
三. 生成器
1. 为什么需要生成器?
1>通过列表生成式,我们可以直接创建一个列表,受到内存限制,列表容量肯定是有限的
2>如果创建一个包含 100 万个元素甚至更多的列表,占用很大的存储空间
2. 生成器是什么?
在 Python 中,一边循环一边计算的机制,称为生成器(Generator),当需要的时候调用next方法生成,可以节省大量的内存空间
3. 怎么创建生成器?
1>把列表生成式的 [] 改成 ()
2>通过函数实现生成式的功能 #yield关键字
4. 怎么调用生成器?
1>使用g.next()方法依次读取元素
2>使用 for 循环
eg1:斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21...
eg2:next方法与yield关键字的关系
注:
a. 函数顺序执行,遇return语句或最后一行函数语句就返回
b. 如果函数里面有yield关键字,那么调用这个函数的结果赋给的变量为生成器
c. 当生成器g调用第一个next方法时,会运行函数,直到遇到第一个yield停止
d. 当调用第二个next方法时,会从停止的地方继续执行,直到遇到下一个yield
3>生成器的send方法
a. 使用send方法给生成器函数发送数据
b. 使用send方法前,必须先调用一次next()方法
c. 遇到下一个yield停止
eg:消费者—生产者模型
测试:
拓展:简易机器人
测试: