迭代器:python中内置的一种节省空间的工具
生成器的本质就是一个迭代器
迭代器和生成器的区别:迭代器是python自带的,生成器是程序员自己写的
def func():
print(123)
return "你好"
func()
def func():
yield "你好" # 停
yield "我好"
yield "大家好"
g = func() # 产生一个生成器
print(g.__next__())
print(g.__next__())
print(g.__next__())
for i in g:
print(i)
return 和 yield 都是返回
return 可以写多个,但是只能执行一次,yield可以写多个,还可以返回多次
yield 会记录执行位置
一个 next() 对应一个 yield
生成器可以用for循环获取
在函数的内部中,yield能将for循环和while循环进行临时暂停
def foo():
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
坑 -- 会产生新的生成器
print(foo().__next__())
print(foo().__next__())
g = foo()
print(next(g)) # python2和python3有next() __next__()只在Python3
print(next(g)) # 推荐使用next()
for i in g:
print(i)
def func():
a = yield "我是send"
print(a)
g = func()
print(g.send(None))
def func():
lst = []
for i in range(10000000):
lst.append(i)
return lst
print(func())
def func():
for i in range(10000000):
yield i
g = func()
for i in range(50):
print(next(g))
def func():
lst = ["牛羊配","老奶奶花生米","卫龙","瞎扯淡","米老头","老干妈"]
for i in lst:
yield i
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
def func():
lst1 = ["牛羊配", "老奶奶花生米", "卫龙", "瞎扯淡", "米老头", "老干妈"]
lst2 = ["小玩熊", "老干爹", "亲嘴烧", "麻辣烫", "黄焖鸡", "井盖"]
yield from lst1
yield from lst2
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
for i in g:
print(i)
原文:https://www.cnblogs.com/Ylinn/p/13869800.html