1. 生成器
本质就是迭代器.
一个一个的创建对象
创建生成器的方式:
1. 生成器函数
2. 通过生成器表达式来获取生成器
3. 类型转换
2. 生成器函数
生成器函数中包含 yield , 返回数据和return差不多.
return会立即结束这个函数的执行
yield 可以分段的执行一个函数
生成器函数在执行的时候返回生成器. 而不是直接执行此函数
能向下执行的两个条件:
__next__(), 执行到下一个yield
send(), 执行到下一个yield, 给上一个yield位置传值
所有的生成器都是迭代器都可以直接使用for循环
都可以使用list()函数来获取到生成器内所有的数据
生成器中记录的是代码而不是函数的运行
def func():
print("我的天哪 ")
yield "宝宝"
gen = func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存
# print(ret.__next__()) # 当执行到__next__(), 运行此空间中的代码, 运行到yield结束
优点: 节省内存, 生成器本身就是代码. 几乎不占用内存
特点: 惰性机制, 只能向前. 不能反复
3. 各种推导式
列表推导式 [结果 for循环 if]
lst = [i**2 for i in range(1, 101) if i%2 == 0]
print(lst)
字典推导式 {结果(k:v) for循环 if}
dic = {"主食": "米饭", "副食": "凉菜", "汤":"菠菜汤"} d = { v:k for k, v in dic.items()} print(d)
集合推导式 {结果(k) for循环 if}
set1 = {"张无忌", "吴奇隆", "张诗诗", "范冰冰", "张翠山"}
set2 = {name for name in lst if name.startswith("张")}
print(set2)
4. 生成器表达式
(结果 for循环 if)
g = (i for i in range(10)) # 生成器表达式
print(g.__next__()) # 当执行到__next__(), 运行此表达式中的代码