def func():
print("这是一个函数")
return "函数"
func()
def func():
print("这是一个生成器")
yield "生成器"
? 通过生成器函数构建生成器
def func():
msg = input("请输入内容")
yield msg
print("这是第二次启动")
yield "生成器2"
yield "生成器3"
yield "生成器4"
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 生成器的本质就是迭代器.迭代器如何取值,生成器就如何取值
? 迭代器的地址:<list_iterator object at 0x000000987B6E97F0>
? 生成器的地址:<generator object func at 0x00000087C2A10CA8>
def func():
a = yield 1
print(a)
b = yield 2
print(b)
g = func()
print(g.send(None)) # send -- 发送
print(g.send("alex")) # send -- 发送
print(g.send("宝元")) # send -- 发送
? 相同点:
? send 和 next()都可以让生成器对应的yield向下执行一次。
? 都可以获取到yield生成的值。
? 不同点:
? 第一次获取yield值只能用next不能用send(可以用send(None))。
? send可以给上一个yield置传递值。
def func():
def foo():
print(11)
lst = {"key":1,"key1":2}
yield foo
print(func().__next__())
def func():
lst = [1,2,3,45,6]
lst1 = ["alex","wusir","taibi","baoyuan"]
yield from lst
yield from lst1
g = func()
for i in g:
print(i)
lst = [1,2,3,45,6]
lst1 = ["alex","wusir","taibi","baoyuan"]
for i in lst,lst1:
print(i)
可迭代对象
? 优点:list , tuple .str 节省时间,取值方便,使用灵活(具有自己私有方法)
? 缺点:大量消耗内存
迭代器
? 优点:节省空间
? 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行
生成器
? 优点:节省空间,人为定义
? 缺点:不能直接查看值,消耗时间,一次性,不可逆行
原文:https://www.cnblogs.com/caiyongliang/p/11462822.html