维多利亚一号粤语,神探阿蒙第四季,吉祥坊造假
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 节省时间,取值方便,使用灵活(具有自己私有方法)
缺点:大量消耗内存
迭代器
优点:节省空间
缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行
生成器
优点:节省空间,人为定义
缺点:不能直接查看值,消耗时间,一次性,不可逆行
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论