生成器函数
yield 与 return的区别
共同点:执行这句话都会返回值
不同点:return直接终止函数,下次从头调用
yield 每次返回时,会记录当前执行位置,下次调用生成器,会从上一次记录位置开始执行
生成器函数语法:
def mygen():
print('one')
yield 1
print('two')
yield 2
gen = mygen()
print(next(gen))
优化写法:
def mygen()
for i in range(1,101):
yield '新球员的号码为{}'.format(i)
gen = mygen()
调用:
for i in range(1,30):
print(next(gen))
send 语法的使用
next:只能取值
send:不但能取值,还能发送值
def func():
print("----start----")
res = yield 111
print(res)
res = yield 222
print(res)
   res = yield "444"
	   print(res)
  print("----end----")
gen = mygen() #初始化生成器
res = gen.send(None)    # 第一次发送,无脑加none
print(res)         # ----start----  111
res = gen.send("我来了2222")
print(res) # 我来了2222 222
yield from 的基本使用
将一个可迭代对象变成一个迭代器返回
def mygen():
	  yield from [1,2,3,4,5]
gen = mygen()
print(next(gen))
print(next(gen))
经典练习:
斐波那契数列
""" 1 , 1 , 2 , 3 ,5 ,8 ,13,21 ,34,55 ... """
def fib(max):
a,b = 0 , 1
i = 0
while i < max:
# print(b)
yield b
a,b = b,a+b
i += 1
gen = fib(50)
for i in range(50):
print(next(gen))
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号