1. 生成器
本质就是迭代器.
一个一个的创建对象
创建生成器的方式:
1. 生成器函数
2. 通过生成器表达式来获取生成器
3. 类型转换(看不到)
2. 生成器函数
生成器函数中包含 yield , 返回数据和return差不多.
return会立即结束这个函数的执行
yield 可以分段的执行一个函数
生成器函数在执行的时候返回生成器. 而不是直接执行此函数
能向下执行的两个条件:
__next__(), 执行到下一个yield
def func(): print(\'今天是12.11\', end=\' \') yield \'today\' print(\'昨天是12.10\', end=\' \') yield \'yesterday\' print(\'明天是12.13\', end=\' \') yield \'tomorrow\' ret = func() print(ret) # <generator func at 0x0000000001DFB7D8> print(ret.__next__()) # 今天是12.11 today print(ret.__next__()) # 昨天是12.10 yesterday print(ret.__next__()) # 明天是12.13 tomorrow
send(), 执行到下一个yield, 给上一个yield位置传值
def func(): print(\'今天是12.11\', end=\' \') a = yield \'today\' print(\'a\',a, end=\' \') print(\'昨天是12.10\', end=\' \') b = yield \'yesterday\' print(\'b\', b, end=\' \') print(\'明天是12.13\', end=\' \') c = yield \'tomorrow\' print(\'c\', c, end=\' \') gen = func() print(gen.__next__()) # 第一个位置用send()没有意义 今天是12.11 today print(gen.send(\'1\')) # 给上一个yield传 值 a 1 昨天是12.10 yesterday print(gen.send(\'2\')) # b 2 明天是12.13 tomorrow
所有的生成器都是迭代器都可以直接使用for循环, 都可以使用list()函数来获取到生成器内所有的数据
lst = [] for i in range(1, 13): lst.append(\'今天是第%s天\' % i) print(lst) # [\'今天是第1天\', \'今天是第2天\', \'今天是第3天\', \'今天是第4天\', \'今天是第5天\', \'今天是第6天\', \'今天是第7天\', \'今天是第8天\', \'今天是第9天\', \'今天是第10天\', \'今天是第11天\', \'今天是第12天\'] lst = [\'今天是第%s天\' % i for i in range(1, 13)] print(lst) # [\'今天是第1天\', \'今天是第2天\', \'今天是第3天\', \'今天是第4天\', \'今天是第5天\', \'今天是第6天\', \'今天是第7天\', \'今天是第8天\', \'今天是第9天\', \'今天是第10天\', \'今天是第11天\', \'今天是第12天\']
gen = func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存
当执行到__next__(), 运行此空间中的代码, 运行到yield结束.
优点: 节省内存, 生成器本身就是代码. 几乎不占用内存
特点: 惰性机制, 只能向前. 不能反复
3. 各种推导式 (诡异)
列表推导式 [结果 for循环 if]
# 生成列表,内容是1-100之间所有偶数的平方 lst = [i**2 for i in range(1, 101) if i % 2 ==0] print(lst)
字典推导式 {结果(k:v) for循环 if}
#练习: {\"主食\":\'炒面\',\'副食\':\'酸辣土豆粉\', \'汤\':\'鸡蛋汤\'} dic = {\"主食\":\'炒面\',\'副食\':\'酸辣土豆粉\', \'汤\':\'鸡蛋汤\'} dic = {v:k for k,v in dic.items()} print(dic)
继续阅读与本文标签相同的文章
下一篇 :
现在,医疗 AI 发展的怎样了?
-
在AlibabaCloud上,如何使用AD FS进行 【角色SSO】 并完成在容器服务ACK集群中的身份验证
2026-05-19栏目: 教程
-
骚操作 !用 Python 偷偷抓取女朋友的行踪(女朋友在哪里)
2026-05-19栏目: 教程
-
受用一生的高效 PyCharm 使用技巧(五)
2026-05-19栏目: 教程
-
阿里云服务器从购买到入门使用流程 新手必看教程
2026-05-19栏目: 教程
-
2019云栖大会,智能视频云专场硬核分享来了!
2026-05-19栏目: 教程
