# 生成器的本质就是迭代器
# 三种创建方法:
'''
1.通过生成器函数
2.通过生成器表达式创建生成器
3.通过数据转换
'''
def func():
print("我是周杰伦")
yield "昆凌" # 函数中包含了yield 当前这个函数就不再是普通的函数了,是生成器函数
print("我是王力宏")
yield "李云迪"
print("我是笛卡尔积")
yield "我是牛顿"
print("爱因斯坦") # 最后yield之后再进行__next__()函数会报错
# return 直接返回结果,结束函数的调用
# yield 返回结果,让函数分段执行
g = func() # 通过函数func() 来创建一个生成器
print(g.__next__()) # 周杰伦
print(g.__next__()) # 王力宏
print(g.__next__())
#print(g.__next__())
注意点:
函数中包含了yield就是生成器函数
生成器函数被执行,获取到的是生成器,而不是函数的执行
取值:
1.__next__()
2.send(值)给上一个yield位置传一个值,第一个和组后一个yield不用传值
3.可以for 循环
4.转换为列表 list(g)
各种推导式和生成器表达式
1.列表推导式 [结果 for 变量 in 可迭代对象 if 筛选]
2.字典推导式 {结果 for 变量 in 可迭代对象 if 筛选} 结果=>key:value
3.集合推导式 {结果 for 变量 in 可迭代对象 if 筛选} 结果 key