<python全栈开发基础>学习过程笔记【17d】生成器
来源:互联网 发布:荥阳网络推广wang1314 编辑:程序博客网 时间:2024/06/05 23:06
1.列表生成式
1
2
>>> [i
*
*
2
for
i
in
range
(
10
)]
[
0
,
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
这个过程是从range(10)列表中依次取元素,计算元素的平方,再放到另一个列表中
2.可以把【1】中的代码写成这种形式
>>> def f(x): return x**2>>> [f(i) for i in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3.元组(列表)内元素个数为n,用元组(列表)给n个变量赋值
>>> a=(1,2,3)>>> x,y,z=a>>> x1>>> y2>>> z3
>>> b=[1,2,3]>>> x1,y1,z1=b>>> x11>>> y12>>> z13
4.生成器有两种创建方式
方法一:
1
2
>>> ( i
*
*
2
for
i
in
range
(
10
))
<generator
object
<genexpr> at
0x03B21480
>
generator就是生成器
这里我们生成了一个生成器对象,为什么我们要生成这样一个对象,而不是列表?因为列表是把值存在列表中...当数据很多时,非常消耗内存。
生成器对象中什么都没存...但它什么都能搞到。用生成器省了空间。
生成器中的值只能一个一个的取
>>> g=( i**2 for i in range(10))>>> next(g) 0>>> next(g)1>>> next(g)4>>> next(g)9>>> next(g)16>>> next(g)25>>> next(g)36>>> next(g)49>>> next(g)64>>> next(g)81>>> next(g) #越界Traceback (most recent call last): File "<pyshell#34>", line 1, in <module> next(g)StopIteration
生成器是一个可迭代对象,所以上面的代码可以简写为:
>>> s=(i**2 for i in range(10))>>> for i in s: #内部:for in循环自动调用next,得到一个值,用i取这个值,使用之后,这个值被垃圾回收机制删除...所以很节省空间 print(i) 0149162536496481
方法二:
使用关键字yield
生成器的本质是一个带yield关键字的函数
>>> def a(): print("ok1") yield 1 #yield返回一个值 print("ok2") yield 2 >>> next(a()) #a()就是一个生成器,每一次next()都会运行到返回一个值为止ok11>>> next(a())ok11
当然还有下面的写法:
>>> for i in a(): #i每次存一个yield返回的值 print(i) ok11ok22
5..什么是可迭代对象?可迭代对象可以使用for in
内部有iter方法的对象就是可迭代对象
可迭代对象有:列表,元组,字符串,字典,生成器对象
阅读全文
0 0
- <python全栈开发基础>学习过程笔记【17d】生成器
- 《Python全栈开发》学习过程笔记【3】
- Python学习笔记-生成器
- Python学习笔记--生成器
- python学习笔记 生成器
- Python生成器学习笔记
- python学习笔记--生成器
- <Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>
- Python学习笔记 - 生成器generator
- python学习笔记--理解生成器
- python 学习笔记6 生成器
- 【Python 学习笔记】各种生成器
- python学习笔记--generator生成器
- python学习笔记-生成器并行
- python学习笔记之生成器
- python基础学习六:python生成器
- 【Python学习笔记】python高级特性:生成器
- 【python学习笔记】Python生成器yield
- javascript日期
- 多线程与线程池总结
- <Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>
- 用 java 判断 括号是否完全匹配
- 关于对多项式的两种表示法的初步理解
- <python全栈开发基础>学习过程笔记【17d】生成器
- 315. Count of Smaller Numbers After Self(divide and conquer)
- Springboot多数据源配置--数据源动态切换
- config-server
- Springboot使用devTools进行热部署
- Math对象和Number对象
- 170918 逆向-jeb2动态调试(ciscn-crack.apk)
- SSH与SSM学习之hibernate19——多对一一对多关系维护
- Springboot国际化i18n