python生成式与生成器
生成式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
比如你要生成一个[ 1x1, 2x2, 3x3, ..., 10x10 ] 的列表,不用生成式的方法:
L = []
for x in range(1,11):
L.append(x)
print(L)
---------------------------------------
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用生成式方法:
L = [ i*i for i in range(1,11) ]
集合、字典的生成式方法都只是括号的不同,使用方法一样。
需要注意的是元组的生成式方法:
(expression for item in Sequence )
其返回值是一个生成器对象。
>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器对象
>>> tuple(a) # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)
生成器和生成式的区别:
生成式是一次性将符合判断条件的所有元素输出至列表;而生成器则是根据需求,在调用时再推算后续的元素,不必创建完整的List,节省大量的空间。 而生成器(generator)的名称也是由其 一边循环一边计算的机制得来的。
可以通过next()函数来取得generator中的下一个返回值
g = (x * x for x in range(10))
print(type(g))
print(next(g))
print(next(g))
print(next(g))
----------------------------------------------
<class 'generator'>
0
1
4
一般使用生成器 用for循环来取得其中的值。
>>> g = (x * x for x in range(10))
>>> for n in g:
... print(n)
...
0
1
4
9
16
25
36
49
64
81
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现