python生成器详解

#!/usr/bin/python
# -*- coding utf8 -*-

#生成器函数 只要函数体包含yield关键字 name该函数就是生成器函数

# def foo():
#     print('first')
#     yield 1
#     print('second')
#     yield 2
#     print('third')
#     yield 3
# g=foo()
# print(g)

#print(next(g))
#print(next(g))
#yield 函数变成迭代器  不再执行  next触发执行

'''
yield的功能:
    1.相当于为函数封装好__iter__和__next__
    2.return只能返回一次值,函数就终止了,
    而yield能返回多次值,每次返回都会将函数暂停,下一次next会从
    上一次暂停的位置继续执行


'''
# def counter(n):
#     print('start')
#     i=0
#     while i<n:
#         print(i)
#         yield i
#         i +=1
#     print('end')
# g=counter(5)
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
#

#tail -f 示例
import time
def tail(filepath):
    with open(filepath,encoding='utf-8') as f:
        f.seek(0,2)
        while True:
            line=f.readline().strip()
            if line:
                yield line
            else:
                time.sleep(0.2)

# t=tail('a.txt')
# print(next(t))

#for line in t:
#    print(line)
def grep(pattern,lines):
    for i in lines:
        if pattern in i:
            yield i
g = grep('python',tail('a.txt'))

for i in g:
    print(i)




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值