生成器
一、生成器函数:只要函数体包含yield关键字,该函数就是生成器函数
1、生成器就是迭代器
1 def foo(): 2 print("first") 3 yield 4 print("second") 5 yield 6 print("third") 7 yield 8 print("fourth") 9 yield 10 print("fifth") 11 12 i = foo() 13 for n in i: #触发迭代器i的执行,进而触发函数的执行 14 print(n)
1 def conter(n): 2 print("starting---") 3 i = 0 4 while i < n: 5 yield i 6 i +=1 7 print("end.....") 8 9 a = conter(9) 10 for d in a : 11 print(d)
2、yield的功能
1.相当于为函数封装好__iter__和__next__
2.return只能返回一次值,函数就终止了,
而yield能返回多次值,每次返回都会将函数暂停,下次next会从
上一次暂停的位置继续执行
1 #tail -f a.txt | grep 'python' 2 import time 3 def tail(filepath): 4 with open(filepath,'r',encoding='utf-8') as f: 5 f.seek(0,2) 6 while True: 7 line=f.readline().strip() 8 if line : 9 yield line 10 else: 11 time.sleep(0.2) 12 13 def grep(patten,lines): 14 for line in lines: 15 if patten in line: 16 yield line 17 g = grep('python',tail('a.txt')) 18 19 20 for i in g: 21 print(i)

浙公网安备 33010602011771号