文章目录
三十五、python高级特性–生成器
35.1 生成式
- 生成式:用来快速生成某个数据类型的式子。
- 列表生成式:是一个用来生成列表的特定语法形式的表达式[ ]
- 字典生成式:用来快速生成字典{ }
- 集合生成式:用来快速生成集合{ }
35.1.1 列表生成式
-
列表生成式:列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。[ ]
- 普通的语法格式:[exp for iter_var in iterable]
- 带过滤功能语法格式: [exp for iter_var in iterable if_exp]
- 循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
-
练习
- 普通语法格式:
- e:x=1…10 求y=3x+12,将求出的所有y值存储到列表中
-
方法一
-
方法二
-
- 带过滤功能语法格式
- e:x=2,4,…,8,求y=3x+12 ,并将求出的所有y值存储到列表中
- e:x=2,4,…,8,求y=3x+12 ,并将求出的所有y值存储到列表中
35.1.2 集合生成式
- 集合生成式:集合生成式就是一个用来生成集合的特定语法形式的表达式。是Python提供的一种生成集合的简洁形式, 可快速生成一个新的集合。{ }
- 练习
- e: x=1…10,求x的平方
- e: x=1…10,求x的平方
35.1.3 字典生成式
使用符号:{ }
格式:key:value
练习:
e: x=1…10,求x的平方
35.2 生成器
35.2.1 生成器的介绍
- 什么是生成器
- 在Python中,一边循环一边计算的机制,称为生成器:Generator。
- 什么时候要用到生成器:
- 性能限制需要用到,比如读取一个10G的文件,如果一次性将10G的文件加载到内存处理的话 (read方法),内存肯定会溢出;但使用生成器把读写交叉处理进行,比如使用(readline和readlines) 就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间.
35.2.2 创建生成器
- 首先将列表生成式改写:【】改写为( )
-
yield关键字(停靠,让步)
- 如果函数中包含yield关键字,调用函数的返回值是生成器,这个时候函数并没有执行。
- 通过调用next函数才开始执行函数的内容,遇到yield就停止执行。
- 当再次调用next方法时,从上次停止的地方继续执行,知道遇到yield关键字停止。
- 函数中遇到yield关键字,函数执行停止,直到调用下一个next函数,从停止的地方继续执行
- 函数中遇到return,函数执行结束,后边的代码不会继续执行。
- yield(停靠 让步)
- 如果函数中包含yield关键字,调用函数的返回值是生成器,这个时候函数没有执行。
- 通过调用next关键字才开始执行函数的内容,遇到yield就停止执行。
- 当再次调用next方法时,从上次停止的地方继续执行,直到在遇到yield关键字停止。
- 第一次执行
- 第二次执行
- 第三次执行
-
练习2