码迷,mamicode.com
首页 > 编程语言 > 详细

python-生成器进阶~生成器函数

时间:2017-11-11 13:07:14      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:一个   技术   循环   tail   不能   文件   odi   display   基础   

监听文件末尾追加的例子
def tail():
    f = open(文件,r,encoding=utf-8)
    f.seek(0,2)
    while True:
        line = f.readline()
        if line:
            yield line
        import time
        time.sleep(0.1)

g = tail()
for i in g:
    print(i.strip())

 send 方法

send方法:
def func():
    print(**10)
    a = yield 5
    print(a)
    yield 10

g = func()
print(g.__next__())
print(g.send(wenwen))
# print(g.__next__())

从哪一个yield开始接着执行,send就把一个值传给了那个yield
send 不能用在第一个触发生成器
生成器函数中有多少个yield就必须有多少个next+send
def averager():
    total = 0.0
    count = 0
    averager = None
    while True:
        term = yield averager
        total += term
        count += 1
        averager = total/count

g_avg = averager()
print(g_avg.__next__())
print(g_avg.send(20))

 


生成器的预激装饰器
技术分享生成器的预激装饰器

 


生成器函数:生成一个生成器函数
生成器的本质是迭代器
生成器函数的特点:带有yield关键字
且调用后,函数内的代码不被执行
触发执行的方式:next send for循环
next 和 send 是执行几次拿几次的数据,可能会遇到取完的数据
for循环是每次取一个,取完为止,for循环不会报错

触发执行的方式:
next
send(选会):send(None) == _next_(),send在next的基础上传一个值到生成器函数内部
send操作不能用在生成器使用的第一次
for 循环

技术分享在衣服厂定衣服的例题
def cloth():
    for i in range(100):
        yield 衣服%s%i

g1 = cloth()
g2 = cloth()
print(g1.__next__())
print(g1.__next__())
for c in cloth():
    print(c)
for i in range(10):
    print(g1.__next__())
for i in range(100):         #由于总数是100,已经取了10个了,当range里面为100时,剩下的90个数不够取100个就会报错
    print(g1.__next__())
for i in g1:                  #这种方法就不会报错,有多少取多少
    print(g1.__next__())
for c in g1:
    print(c)
    if c.endswith(80):
        break
print(**20)
for c in g1:
    print(c)

 


例题:要求执行结果为‘A‘,‘B‘,‘C‘,‘D‘
def func():
    a = AB
    b = CD
    # yield from a
    for i in a:yield i
    # yield from b
    for i in b:yield i

g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
g._next_()也可以用next(g)来表示
g._iter_()也可以用iter(g)来表示
不是所有的_方法_都可以使用方法()来表示
 


python-生成器进阶~生成器函数

标签:一个   技术   循环   tail   不能   文件   odi   display   基础   

原文地址:http://www.cnblogs.com/dwenwen/p/7818519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!