即自己写的函数
只要包括__next__()函数和_iter__()的就是生成器
def genetator():
print(1)
return ‘a‘
ret = genetator()
print(ret)
结果:
1
a
只要含有yeild关键字的函数都是生成器函数,且与return不能共用,且需要写在函数内部
def genetator():
print(1)
yield ‘a‘
# 生成器函数:执行之后会得到一个生成作为返回值
ret = genetator()
print(ret)#结果:<generator object genetator at 0x0225DCC0>
print(ret.__next__())
# 结果:
# 1
# a
ret.__iter__()
def wahaha():
for i in range(20):
yield ‘娃哈哈%s‘%i
g=wahaha()
#只拿前五个,用count计数
count = 0
for k in g:
count += 1
print(k)
if count > 5:
break
#随时可以再拿下一个值
print(‘ooooo‘,g.__next__())
每生成一个生成器,都互不相关,各个执行
# 监听文件的输入
def tail(filename):
f = open(filename,encoding=‘utf-8‘)
while True:
line = f.readline()
if line.strip():
print(‘***‘,line.strip())
tail(‘info‘)
#监听文件的输入,并对内容进行过滤
def tail(filename):
f = open(filename,encoding=‘utf-8‘)
while True:
line = f.readline()
if line.strip():
yield line.strip()
g = tail(‘info‘)
for i in g:
if ‘python‘ in i:
print(‘******‘,i,‘~~~~‘)
if ‘www‘ in i:
print(‘******‘,i,‘!!!!‘)
原文:https://www.cnblogs.com/Cheryol/p/9742552.html