Python 生成器
1.生成器原理
def func(): print('before yield1') yield "i am yield1" # 将后面的值返回 print('before yield2') yield "i am yield2" print('before yield3') yield "i am yield3" f = func() #执行生成器函数,内部不执行 print(f,type(f)) # <generator object func at 0x00000000035EBA40> <class 'generator'> res = f.__next__() #执行函数内部前两行 print(res) res = f.__next__() print(res) res = f.__next__() print(res) res = f.__next__() #执行出错,有多少个yield,执行多少个next,否则抛出异常 print(res)
2.yield 与 return
def func(n): start = 1 while True: if start > n: return yield start start += 1 f = func(3) res1 = f.__next__() res2 = f.__next__() res3 = f.__next__() res4 = f.__next__() #出错,函数执行到这里的时候已经退出,找不到下一个yield print(res1,res2,res3)
3.send
#send 执行流程,执行发送一个值给当前yield 等号左边变量,执行到下一个yield,返回下一个yield的右边值 def func(): print('a') m = yield 1 #第一次send(None) ,找到第一个yield print(m) # 11 print('b') n = yield 2 print(n) # 22 print('c') f = func() f.send(None)#send 与 next 方法类似,send 可以传递一个值,第一次要send 空, 返回1 f.send(11) f.send(22) #抛出异常,找不到下一个yield

浙公网安备 33010602011771号